https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
#include <iostream>
#include <cstring>
using namespace std;
const int MAX = 1000001;
int dp[MAX];
int memo[MAX];
int makeOne(int n) {
if (n == 1) return 0; // 기저 조건
// memoization
if (memo[n] != -1) return memo[n];
// dp 점화식
dp[n] = makeOne(n - 1) + 1;
if (n % 2 == 0) dp[n] = min(dp[n], makeOne(n / 2) + 1);
if (n % 3 == 0) dp[n] = min(dp[n], makeOne(n / 3) + 1);
memo[n] = dp[n]; // memoization
return dp[n];
}
int main() {
int n;
cin >> n;
memset(memo, -1, sizeof(memo)); // memoization 배열 초기화
cout << makeOne(n) << '\n';
return 0;
}
'Coding > 백준 온라인 저지 (Baekjoon Online Judge)' 카테고리의 다른 글
백준 온라인 저지(Baekjoon Online Judge) - 2501 : 약수 구하기 (0) | 2023.05.11 |
---|---|
백준 온라인 저지(Baekjoon Online Judge) - 9506 : 약수들의 합 (0) | 2023.05.11 |
백준 온라인 저지(Baekjoon Online Judge) - 10948 : Daily 로또 (0) | 2023.05.11 |
백준 온라인 저지(Baekjoon Online Judge) - 27959 : 초코 (0) | 2023.05.10 |
백준 온라인 저지(Baekjoon Online Judge) - 9095 : 1, 2, 3 더하기 (0) | 2023.05.10 |