[백준] 1463 - 1로 만들기
2024. 6. 25. 12:38ㆍPS/백준
728x90
문제 링크
https://www.acmicpc.net/problem/1463
느낀점
DP문제인지 판단할 때, 더 작은 문제로 나눌 수 있는지를 생각해보고 만약 DP로 풀 수 있다면, 어떻게 이전의 값을 이용하여 문제를 해결할 수 있는지 생각해보자
# 목표가 되는 수까지 모든 숫자를 계산해서 저장해놓은 후, 이를 바탕으로 목표 숫자를 계산
# 여기서 중요한 것은, 목표 숫자를 분해하는 것이 이전 숫자들을 이용하여 할 수 있다는 것
import sys
num = int(sys.stdin.readline())
# DP 테이블 초기화
DP = [0] * 1000001
# 다이나믹 프로그래밍 진행(bottom-up)
for i in range(2, num+1):
# 현재의 수에서 1을 빼는 경우
DP[i] = DP[i-1] + 1
# 현재의 수가 2로 나누어 떨어지는 경우
if i%2 == 0:
DP[i] = min(DP[i], DP[i//2] + 1)
# 현재의 수가 3으로 나누어 떨어지는 경우
if i%3 == 0:
DP[i] = min(DP[i], DP[i//3] + 1)
# 결과 출력
print(DP[num])
'PS > 백준' 카테고리의 다른 글
[백준] 11726 - 2×n 타일링 (0) | 2024.06.25 |
---|---|
[백준] 9095 - 1, 2, 3 더하기 (0) | 2024.06.25 |
[백준] 20117 - 호반우 상인의 이상한 품질 계산법 (0) | 2024.05.24 |
[백준] 1107 - 리모컨 (0) | 2024.05.24 |
[백준] 1946 - 신입 사원 (0) | 2024.05.22 |