1464 1로 만들기
by 브이담곰
https://www.acmicpc.net/problem/1463
✔ 유형 : DP
✔ 문제 풀이:
정수에 사용할 수 있는 연산은 총 3가지인데, 빠르게 1을 만들려면 세가지 연산을 시행했을 때 값이 가장 작아야 한다.
X라는 수를 1로 만들으려 했을 때,
위 세가지 연산을 시행하면 우선 1번의 연산을 한 것이 된다.
DP[X] = 정수 X에 연산을 시행했을 때 1이 되는 최소 연산 수행 횟수
라고 정의할 때
다음과 같이 문제를 작게 나눌 수 있다.
DP[X] = 1 + DP[X에 세가지 연산중 하나로 실행한 결과]
와 같게 된다.
따라서 X에 세 가지 연산을 실행한 결과 값 중 가장 작은 값을 반영해서
최소 연산 횟수를 저장해 나갈 수 있다.
다시 정리해보면 아래 점화식을 세울 수 있다.
코드
import sys
N = int(input())
DP = [0 for _ in range(N+1)]
if(N > 1):
for i in range(2,N+1):
DP[i] = 1 + min(DP[i//3] if i%3 == 0 else 1e9 , DP[i//2] if i%2 == 0 else 1e9, DP[i-1])
print(DP[N])
'Coding Test > Baekjoon' 카테고리의 다른 글
11053 가장 긴 증가하는 부분의 수열 (0) | 2024.08.13 |
---|---|
2156 포도주 시식 (0) | 2024.08.10 |
1923 연속합 (0) | 2024.08.06 |
1932 정수 삼각형 (0) | 2024.08.05 |
9461. 파도반 수열 (0) | 2024.07.31 |
블로그의 정보
농담곰담곰이의곰담농
브이담곰