BOJ 1463[백준 1463]
이 문제는 다이나믹 프로그래밍 문제로, bottom-up 방식으로 문제를 해결하였습니다.
작은 값에서 부터 시작해서 큰 값으로 갈수록, 작은 값이었을 때 결과 값을 활용하는 방법입니다.
- 입력 값 +1의 크기로 배열을 만든다.(시작값을 1로 하기 위해서, array[0]은 쓰지 않는다.)
- 1일 때는 결과 값이 0이므로, array[1]에 0을 넣는다.
- array[i]에 array[i-1] + 1을 넣는다.
- i가 2로 나누어 떨어지면, array[i]에 array[i]와 array[i/2]+1 중 작은 값을 넣는다.
- i가 3으로 나누어 떨어지면, array[i]에 array[i]와 array[i/3]+1 중 작은 값을 넣는다.
- 3-5번을 n까지 반복한다.
- array[n]을 출력한다.
핵심코드는 다음과 같습니다.
1 | for(int i = 1; i <= n; i++) { |
전체 소스 코드는 여기서 확인하실 수 있습니다.