코딩테스트/백준
[백준][C++]1463번 1로 만들기
윤깡패
2023. 6. 9. 18:16
문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
풀이
바텀-업 방식(동적 계획법 구현 방식)으로 구현 : 점화식을 이용해 DP 테이블을 채운다.
- count[i] : i에서 1로 만드는 데 걸리는 최소 연산 횟수
동적 계획법(Dynamic Programming) 알고리즘
동적 계획법(Dynamic Programming) 알고리즘
동적 계획법(Dynamic Programming) 알고리즘 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법 동적 계획법 알고리즘 핵심
soobin0821.tistory.com
코드
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
int count[N + 1];
count[0] = 0;
for(int i = 1; i <= N; i++)
{
count[i] = i - 1;
if(i % 3 == 0)
{
count[i] = min(count[i], count[i / 3] + 1); // 나누기 3 연산
}
if(i % 2 == 0)
{
count[i] = min(count[i], count[i / 2] + 1); // 나누기 2 연산
}
count[i] = min(count[i], count[i - 1] + 1); // -1 연산 표현
}
cout << count[N];
}
728x90