1로 만들기
Program Lang./Algorithm 2017. 10. 26. 19:361. 소스 코드
백준 https://www.acmicpc.net/problem/1463 문제 정리.
이 문제를 처음 접하는 순간 아무 생각이 들지 않았다. 나는 왜 이리 멍청할까 정도만 생각이 들지
모든 문제를 해결하기 위해서 먼저 완전탐색부터 고민하면서 속도 개선을 위해서 하나 하나 개선해 가는 식으로 여기에 정리한다. 참고로 여러 사람들이 해 놓은 코드를 참조하였다.
아래 코드는 완전 탐색으로 구현한 내용이다.
2. DP 코드
dp[n] = f(n-1) + 1로 완전탐색 루틴에서 가장 왼쪽 노드의 값에서 차례되로 dp[n]값을 구하고 f(n/2) 또는 f(n/3)에서 그 값이 더 작으면 dp[n]을 update하는 식으로 처리하면서 최종값을 얻는다.
결론적으로 위 완전 탐색에서 f함수 두번째 매개변수 처리를 dp배열로 어떻게 처리하느냐가 관건으로 보인다.
결론적으로 재귀함수 호출을 모두 제거하면 아래와 같은 코드로 완성할 수 있다.
위의 재귀함수 호출 코드를 하나하나 따라가 보면 결국 재귀함수 호출 내에서 DP값이 모두 구해져 있어서
DP값으로 재귀함수 변환값은 대체된다. 이를 통해서 재귀호출 구문은 아래처럼 모두 없앨 수 있다.
'Program Lang. > Algorithm' 카테고리의 다른 글
최소 신장 트리 - 프림(Prim) 알고리즘 (0) | 2017.11.20 |
---|---|
위상정렬 (Topological Sort) - Indegree (0) | 2017.11.06 |
계단오르기 (0) | 2017.10.25 |
숫자삼각형 문제풀이 (0) | 2017.10.25 |
RGB 거리 (0) | 2017.10.22 |