백준 Algorithm

[백준 1463 1로 만들기] PYTHON

harry595 2021. 2. 26. 19:32

 

10의 경우 나누기 2를 먼저하면 안되고 -1을 하고 나누기 9를 하는게 가장 빠르다.

그냥 WHILE문으로 조건을 따져 구해볼까 했으나 조건을 찾는게 어려울 것 같아 DP로 풀었다.

 

A=int(input())
dp=[0]*(A+1)
dp[1]=0
for i in range(2,A+1):
    dp[i]=dp[i-1]+1
    if(i%2==0 and dp[i]>dp[i//2]+1):
        dp[i]=dp[i//2]+1
    if(i%3==0 and dp[i]>dp[i//3]+1):
        dp[i]=dp[i//3]+1
print(dp[A])

위처럼 풀면 간단하게 정답을 구할 수 있다.

낮은 배열부터 최소의 경우를 따져 배열에 집어넣고

그러다 보면 결국 마지막 값까지 이를 사용해 구할 수 있다.