코딩테스트/Python
[Python] 백준 #1463 - 1로 만들기
yo~og
2021. 12. 12. 16:17
문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
풀이
n = int(input())
d=[0]*(n+1)
d[1]=0
for i in range(2,n+1):
arr=[]
if i%3==0:arr.append(d[i//3]+1)
if i%2==0:arr.append(d[i//2]+1)
arr.append(d[i-1]+1)
d[i] = min(arr)
print(d[n])
동적프로그래밍을 사용하였다. d를 만들어서 3으로 나누어질때, 2로 나누어질때를 구하고 -1을 할때도 구해준다.
이들 중에 최솟값을 구해준다.
[다른사람 코드] - 백준 숏코딩
n = int(input())
li = [0]*(n+1) # 0,1,2,...,n
li[1] = 0
for i in range(2,n+1) :
li[i] = min((li[i//3]+i%3+1),(li[i//2]+i%2+1))
print(li[n])
푼 방식은 비슷한데 한줄 코딩을 한 것이다. i%3을 더해주면 i-1을 추가로 할 필요가 없어진다.