1463. 1로 만들기
업데이트 시간 : 2023-02-09 05:16:18 +0000[Silver III] 1로 만들기 - 1463
성능 요약
메모리: 39504 KB, 시간: 556 ms
분류
다이나믹 프로그래밍(dp)
문제 설명
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
입력
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
출력
첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
💡 Solutions
📄 1로 만들기.py
N = int(input())
dp = [0 for _ in range(N + 1)]
for idx in range(2,N+1): # 어차피2 일때는 무조건 count가 +1이된다.
dp[idx] = dp[idx - 1] + 1
if idx % 3 == 0:
dp[idx] = min(dp[idx//3] + 1, dp[idx])
if idx % 2 == 0 :
dp[idx] = min(dp[idx//2] + 1, dp[idx])
print(dp[N])