코테 준비/DP

1463. 1로 만들기

imsmile2000 2023. 1. 3. 21:39
import sys
n=int(sys.stdin.readline())
count=0
result=[0]*(n+1)
for i in range(2,n+1):
    result[i]=result[i-1]+1 # 일단 1을 먼저 빼기
    if i%2==0:
        result[i]=min(result[i],result[i//2]+1)
    if i%3==0:
        result[i]=min(result[i],result[i//3]+1)
print(result[-1])

 

n=10일때 result를 출력해보면  [0, 0, 1, 1, 2, 3, 2, 3, 3, 2, 3]이다

1. result=[0,0,0,0,0,0,0,0,0,0]  # result[0]*(n+1)

2. result=[0,0,1,0,0,0,0,0,0,0]  # result[2]=result[1]+1

3. result=[0,0,1,0,0,0,0,0,0,0]  # result[2]=min(result[2],result[1]+1)=min(1,2)=1

4. result=[0,0,1,2,0,0,0,0,0,0]  # result[3]=result[2]+1

5. result=[0,0,1,1,0,0,0,0,0,0]  # result[3]=min(result[3],result[1]+1)=min(2,1)=1

.

.

.

6. result=[0, 0, 1, 1, 2, 3, 2, 3, 3, 2, 3]