-
[백준][1463번] 1로 만들기Algorithm/백준 2020. 3. 18. 22:49
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
풀이과정
1. dp를 이용했다.
2. -1, n/3, n/2 3가지 방식을 이용하면
dp[N] = min( n-1, n/3, n/2) + 1로 점화식을 구할 수 있다.
*마지막이 n - 1 인경우 + 1을 하면 dp[N]이 된다. 이와 같이 3가지 방식 중 가장 최솟값을 뽑아 내면 된다.
소스코드
더보기#include <stdio.h> #include <algorithm> using namespace std; int dp[1000001]; int solution(int n) { if (n <= 1) return 0; if (dp[n] > 0) return dp[n]; dp[n] = solution(n - 1) + 1; if (n % 3 == 0) { int tmp = solution(n / 3) + 1; dp[n] = min(dp[n], tmp); } if (n % 2 == 0) { int tmp = solution(n / 2) + 1; dp[n] = min(dp[n], tmp); } return dp[n]; } int main() { int n; scanf("%d", &n); dp[1] = 0; dp[2] = 1; printf("%d\n", solution(n)); }
'Algorithm > 백준' 카테고리의 다른 글
[백준][9465번] 스티커 (0) 2020.03.19 [백준][11057번] 오르막 수 (0) 2020.03.19 [백준][10844번] 쉬운 계단 수 (0) 2020.03.19 [백준][2193]이친수 (0) 2020.03.19 [백준][11726번] 2×n 타일링 (0) 2020.03.18