SMALL
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
- 문제
- 문제풀이
다이나믹 프로그래밍을 사용하였다. 재귀 방식을 사용하여 문제를 풀었다.
- 코드 1
using System;
class MainClass
{
public static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int[] dp = new int[n + 1];
int count = FindMinOperations(n, dp);
Console.WriteLine(count);
}
public static int FindMinOperations(int n, int[] dp)
{
if (n == 1)
{
return 0;
}
if (dp[n] > 0) // 이미 계산한 값이 있다면 그 값을 사용
{
return dp[n];
}
int minOperations = FindMinOperations(n - 1, dp) + 1; // n에서 1을 빼는 경우
if (n % 2 == 0)
{
minOperations = Math.Min(minOperations, FindMinOperations(n / 2, dp) + 1); // n을 2로 나누는 경우
}
if (n % 3 == 0)
{
minOperations = Math.Min(minOperations, FindMinOperations(n / 3, dp) + 1); // n을 3으로 나누는 경우
}
dp[n] = minOperations; // 최소 연산 횟수를 저장
return minOperations;
}
}
- 후기
다이나믹 프로그래밍은 항상 접근하기 어렵다. 많이 노력해야겠다.
LIST
'백준 > C#' 카테고리의 다른 글
[C#]백준 1912번: 연속합 (0) | 2023.08.25 |
---|---|
[C#]백준 11053번: 가장 긴 증가하는 부분 수열 (0) | 2023.08.25 |
[C#]백준 1697번: 숨바꼭질 (0) | 2023.07.24 |
[C#]백준 7576번: 토마토 (0) | 2023.07.24 |
[C#]백준 7562번: 나이트의 이동 (0) | 2023.07.24 |