https://www.acmicpc.net/problem/17626
> dp
i%2로 나눠지고 i%3으로 나눠지면
min함수를 이용해서
어떤 경우를 선택해야 최솟값으로 나오는 지
확인해야한다.
위에서 구한 값과
-1을 뺀 값중에서도
어떤 경우를 선택해야 최솟값으로 나오는 지
확인해야 한다.
import sys
n = int(sys.stdin.readline())
dp = [0 for _ in range(n + 1)]
dp[0], dp[1] = 0, 0
for i in range(2, n + 1):
temp=1e9
if i % 2 == 0:
temp= min(temp, dp[i // 2] + 1)
if i % 3 == 0:
temp = min(temp, dp[i // 3] + 1)
dp[i] = min(temp, dp[i - 1] + 1)
print(dp[n])
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[2138] 전구의 스위치 in python (0) | 2022.03.14 |
---|---|
[9095] 1,2,3 더하기 in python (0) | 2022.03.14 |
[17626] Four Squares in python (0) | 2022.03.10 |
[1735] 분수합 in python (0) | 2022.03.10 |
[1010] 다리놓기 in python (0) | 2022.03.09 |