01. 문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
02. 코드
//1로만들기
//알고리즘 분류: DP
#include <iostream>
#include <algorithm>
using namespace std;
int dp[1000001];
int main()
{
int n;
//input
cin >> n;
//sol
dp[1] = 0;
for (int i = 2; i <= n; i++) { //2345678910
dp[i] = dp[i - 1] + 1;
//cout << "(i, dp[i]): " << i << "," << dp[i] << endl;
if (i % 3 == 0) {
dp[i] = min(dp[i], dp[i / 3] + 1);
//cout << "(i, dp[i]): " << i << "," << dp[i] << endl;
}
else if (i % 2 == 0) {
dp[i] = min(dp[i], dp[i / 2] + 1);
//cout << "(i, dp[i]): " << i << "," << dp[i] << endl;
}
}
//output
cout << dp[n];
}
03. 풀이
1까지 나온 경우의 수 중 최소 값을 dp[1]에 저장
2까지 나온 경우의 수 중 최소 값을 dp[2]에 저장
3까지 나온 경우의 수 중 최소 값을 dp[3]에 저장
4까지 나온 경우의 수 중 최소 값을 dp[4]에 저장
....
n까지 나온 경우의 수 중 최소 값을 dp[n]에 저장
'알고리즘 > Baekjoon Online Judge' 카테고리의 다른 글
https://www.acmicpc.net/problem/11651 (0) | 2020.02.26 |
---|---|
[stable_sort]https://www.acmicpc.net/problem/10814 (0) | 2020.02.25 |
큰 수 더하는 고전적인 방법 (0) | 2020.02.24 |
분할 정복을 이용한 최대공약수 (0) | 2020.01.27 |
https://www.acmicpc.net/problem/3055 (0) | 2020.01.10 |