본문 바로가기
전공공부/코딩테스트

(c++) 백준 "1463) 1로 만들기"

by 시아나 2022. 6. 6.

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net


#include <iostream>
#define MAX 1000001;
using namespace std;

int dp[1000001] = { 0,0,1,1 };

int main() {
	int N; cin >> N;
	for (int i = 4; i <= N; i++) {
		int three, two, one = dp[i-1]+1;
		three = (i % 3 == 0) ? dp[i / 3] +1 : MAX;
		two = (i % 2 == 0) ? dp[i / 2]+1 : MAX;
		dp[i] = min(three, min(two, one));
	}
	cout << dp[N] << endl;
}