PS/Python
[Python] 백준(BOJ) 1463번: 1로 만들기 - dp
yoo.o
2020. 11. 1. 01:57
반응형
문제
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
풀이
다이나믹 프로그래밍으로 풀 수 있는 문제
배열을 하나 만들어서 N까지 채워주는 방식으로 풀었다.
1부터 3까지는 0, 1, 1으로 채워주고
그 뒤부터는 3으로 나눈 값(나누어 떨어지는 경우), 2로 나눈 값(나누어 떨어지는 경우), 1을 뺀 값 세가지 중 가장 작은 값에 1을 더해서 배열에 넣어줬다.
import sys
N = int(sys.stdin.readline())
arr = [0, 0]
for i in range(2, N+1):
if i <= 3:
arr.append(1)
else:
li = []
if i % 3 == 0:
li.append(arr[int(i/3)] + 1)
if i % 2 == 0:
li.append(arr[int(i/2)] + 1)
li.append(arr[i-1]+1)
arr.append(min(li))
print(arr[N])
반응형