알고리즘/백준 DP강의

2강. 문제풀이1_1로 만들기,

헤옹스 2018. 2. 26. 11:52

BFS로도 가능할 것 같은데??


D[n]에 어떤 값이 저장되어야하는지 먼저 정해야함.

문제에서 구하라고 하는 내용을 그대로 넣어주면 됨.


D[n] = N을 1로 만드는데 필요한 연산의 최소값.


N-> ... -> 1 : D[n]번의 연산 사용한 것.


1) 나누기 3을 할 경우, 연산 과정에서 연산 횟수는, 1(나누기 3)과 D[N/3] 부분으로 나뉨.

2) 나누기 2 : 1(나누기 2)과 D[N/2] 부분으로 나뉨.

3) 빼기 1 : 1(빼기 1)과 D[N-1]부분으로 나뉨.


D[n/3] : N/3을 1로 만드는 데 필요한 연산의 최소값.


D[n] 을 만드는 방법은 총 세가지 이므로

D[n] = D[n/3] + 1

D[n] = D[n/2] + 1

D[n] = D[n-1] + 1


즉, 이 중 최소값을 구하면 됨.

D[n] = min( D[n/3] + 1, D[n/2] + 1, D[n-1] + 1 );