-
백준 1463_1로 만들기알고리즘/백준 2020. 8. 17. 10:25
동적계획법을 사용한 문제
Top_down 재귀문을 사용해 풀이하면...
n에 대해 min(3또는 2로 나눈 경우, n-1의 경우)에서 작은 값만을 선택해가면서 답을 구할 수 있다.
ex)
10
10은 2로 나누어지기 떄문에 min(make_1(5), make_1(9))
5는 1+make_1(4)
9는 1+min(make_1(3), make_1(8))
...
10 -> 9 -> 3 -> 1
결과값 : 4
#include <stdio.h> int min(int a, int b){ return a > b ? b : a; //최소값 return } int make_1(int n){ if(n==1) return 0; if(!(n%3)) return 1+min(make_1(n/3), make_1(n-1)); if(!(n%2)) return 1+min(make_1(n/2), make_1(n-1)); return 1+make_1(n-1); } int main(){ int n; scanf("%d",&n); printf("%d\n", make_1(n)); return 0; }
'알고리즘 > 백준' 카테고리의 다른 글
백준 1110_더하기 사이클 (0) 2020.10.09 백준 2193_이친수 (0) 2020.08.17 Dynamic Programming (0) 2020.08.09 백준1260_DFS와 BFS (0) 2020.06.03 백준 알고리즘2798_블랙잭 (0) 2020.05.28