반응형
문제링크 : https://www.acmicpc.net/problem/12852
단순 구현 문제였습니다.
Top-Down 방식으로 풀었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> using namespace std; int d[1000001],ans[1000001]; int go(int n) { int out; int m = 2000000000; int tmp; if (n == 1) { return 0; } if (d[n] > 0) { return d[n]; } tmp = go(n - 1) + 1; if (m > tmp) { out = n - 1; m = tmp; } if (n % 2 == 0) { tmp = go(n / 2) + 1; if (m > tmp) { m = tmp; out = n / 2; } } if (n % 3 == 0) { tmp = go(n / 3) + 1; if (m > tmp) { m = tmp; out = n / 3; } } ans[n] = out; return d[n] = m; } int main() { int n; cin >> n; cout << go(n) << '\n'; cout << n << ' '; while (ans[n] != 1) { cout << ans[n] << ' '; n = ans[n]; } cout << '1' << '\n'; } | cs |
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ)3028번 : 창영마을 답 (0) | 2017.04.01 |
---|---|
(C++) - 백준(BOJ) 1806번 : 부분합 답 (0) | 2017.03.29 |
(C++) - 백준(BOJ)코딩 7568번 : 덩치 답 (0) | 2017.03.22 |
(C++) - 백준(BOJ) 10814번 : 나이순 정렬 답 (0) | 2017.03.20 |
(C++) - 백준(BOJ) 11943번 : 파일 옮기기 (0) | 2017.03.19 |