알고리즘
백준 1463번: 1로 만들기
leeeee.yeon
2022. 1. 7. 11:25
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
def makeOne(n):
dp = [0] * (n + 1)
for i in range(2, n+1):
dp[i] = dp[i-1] + 1
if i % 3 == 0:
dp[i] = min(dp[i], 1 + dp[i//3])
if i % 2 == 0:
dp[i] = min(dp[i], 1 + dp[i//2])
return dp[n]
n = int(input())
print(makeOne(n))
DP는 모든 방법을 일일이 검토하여 최적의 해를 찾아내는 방식이다.
결국 1 빼기, 2 나누기, 3 나누기라는 세 가지 방법을 모두 시도해야 하므로 1 빼기를 먼저 한다.
그리고 2 나누기나 3 나누기를 해보고, min을 이용하여 더 작은 값으로 결정한다.
- append보다는 0으로 이루어진 배열을 만든 뒤, 원소를 교체하는 방법으로 하자.
- if, elif가 아니라 둘 다 if문