알고리즘/백준

[백준 알고리즘] 1463번: 1로 만들기 (Python / 파이썬)

gyujh 2024. 2. 28. 22:37
문제 링크
 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

 

문제 접근

DP 테이블을 이용한다.

현재 자신(숫자)를 만들기 위해 필요했던 연산의 개수를 저장한다.

각 수 연산을 다 해주고, 이 연산을 거친 결과를 서로 비교해서 가장 최솟값을 DP 테이블에 순차적으로 저장한다.

 

정답 코드
import sys

X = int(sys.stdin.readline())

dp = [0] * (X + 1)

for i in range(2, X + 1):
    dp[i] = dp[i - 1] + 1
    if i % 2 == 0:
        dp[i] = min(dp[i], dp[i // 2] + 1)
    if i % 3 == 0:
        dp[i] = min(dp[i], dp[i // 3] + 1)

print(dp[X])