Deff_Dev
[백준] 1463번 1로 만들기 (C++) 본문
문제
https://www.acmicpc.net/problem/1463
풀이
이 문제는 다이나믹 프로그래밍 문제이다.
dp[i] = min(dp[i+1] + 1, dp[i]) (모든 i에 대해)
dp[i] = min(dp[2i] + 1, dp[i]) (i가 2의 배수일 때)
dp[i] = min(dp[3i] + 1, dp[i]) (i가 3의 배수일 때)
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int dp[1000001] = { 0, };
int main() {
int n;
cin >> n;
for (int i = n; i >= 1; i--) {
if (dp[i - 1] == 0) {
dp[i - 1] = dp[i] + 1;
}
else {
dp[i - 1] = min(dp[i - 1], dp[i] + 1);
}
if (i % 2 == 0) {
if (dp[i / 2] != 0) {
dp[i / 2] = min(dp[i / 2], dp[i] + 1);
}
else
{
dp[i / 2] = dp[i] + 1;
}
}
if (i % 3 == 0) {
if (dp[i / 3] != 0) {
dp[i / 3] = min(dp[i / 3], dp[i] + 1);
}
else
{
dp[i / 3] = dp[i] + 1;
}
}
}
cout << dp[1];
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 14501 퇴사 (C++) (0) | 2024.10.27 |
---|---|
[백준] 11053번 가장 긴 증가하는 부분 수열 (0) | 2024.10.27 |
[백준] 2579번 계단 오르기 (C++) (0) | 2024.10.27 |
[백준] 설탕 배달 (C++) (0) | 2024.10.27 |
[백준] 2252번 줄 세우기 (C++) (0) | 2024.10.16 |