소스코드
x = int(input())
dp = [0]*(x+1)
dp[1] = 0
for i in range(2,x+1):
dp[i] = dp[i-1] + 1
if i % 3 == 0:
dp[i] = min(dp[i], dp[i // 3] + 1)
if i % 2 == 0:
dp[i] = min(dp[i], dp[i // 2] + 1)
print(dp[x])
알고리즘
DP문제는 많이 풀어봐서 이번 문제는 그리 어렵지는 않았다.
1이 되기 위해서 필요한 연산의 숫자를 구하는 것 이다.
- 2,3은 1에 2배,3배를 하면 된다.
- 4는 2까지 걸린 연산 횟수의 1번 더(2배) 하면 된다.
- 5는 4까지의 연산에 1번더(+1)
- 6은 2까지의 연산에 1번더(*2)
최소 횟수에 대해 전에 걸 불러와서 연산해 나가는 방식이다.
'Coding test' 카테고리의 다른 글
[백준/1339/파이썬] 단어수학 - 그리디 (0) | 2023.01.25 |
---|---|
[백준/1107/파이썬] 리모컨 - Brute force (0) | 2023.01.24 |
[백준/6588/파이썬] 골드바흐의 추측 (0) | 2023.01.22 |
[백준/16936/파이썬] 나3곱2 (0) | 2023.01.21 |
[백준/14225/파이썬] 부분수열의 합 (2) | 2023.01.20 |