Dynamic Programming(DP) - 1로 만들기[1463]
2022. 4. 3. 00:00ㆍ2022/BaekJoon_알고리즘
조건
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
Idea
DP (Bottom-Up 방식) : 결과 저장용 리스트인 DP 테이블을 통해 1부터 N까지 순차적으로 1을 만들기 위한 최소 연산 횟수를 저장
# 여기서 만든 로직은 제일 작은 수인 1부터 순차적으로 최소 연산 횟수로 1을 만드는 방법을 저장하면서 N까지 도달하는 것
N = int(input())
dp = [0] * (N+1)
# 1은 아무런 연산을 하지 않아도 되므로, 2부터 시작
for i in range(2, N+1):
# +1 = 일단 -1 연산을 했을때의 경우를 카운팅한 것
dp[i] = dp[i-1]+1
# -1 연산을 한 경우와 3 으로 나누는 경우 중에서 횟수가 더 적은 것을 택함
# -1 or //3 연산을 한 경우와 2로 나누는 경우 중에서 횟수가 더 적은 것을 택함
if i%3 == 0:
dp[i] = min(dp[i], dp[i//3]+1)
if i%2 == 0:
dp[i] = min(dp[i], dp[i//2]+1)
print(dp[N])
'2022 > BaekJoon_알고리즘' 카테고리의 다른 글
DFS - 바이러스[2606번] (0) | 2022.04.09 |
---|---|
Dynamic Programming(DP) - 정수 삼각형[1932] (0) | 2022.04.07 |
Dynamic Programming(DP) - RGB거리[1149] (0) | 2022.04.06 |
Dynamic Programming(DP) - 2×n 타일링[11726] (0) | 2022.04.05 |
Dynamic Programming(DP) - 1, 2, 3 더하기[9096] (0) | 2022.04.04 |