문제 링크
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])
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 9095번: 1, 2, 3 더하기 (Python / 파이썬) (0) | 2024.02.28 |
---|---|
[백준 알고리즘] 1992번: 쿼드트리 (Python / 파이썬) (0) | 2024.02.19 |
[백준 알고리즘] 1926번: 그림 (Python / 파이썬) (1) | 2024.02.19 |
[백준 알고리즘] 16987번: 계란으로 계란치기 (Python / 파이썬) (1) | 2024.01.28 |
[백준 알고리즘] N과 M (12) (Python / 파이썬) (0) | 2024.01.28 |