백준 1로 만들기 코드 및 해설 (파이썬)
2021. 10. 28. 17:50ㆍalgorithm
반응형
https://www.acmicpc.net/problem/1463
나누고 빼는 대신 곱하고 더하는 것으로 바꿔 풀었다. N에서 1로 줄여나가는 것이 아니라, 1에서 N으로 늘려가는 것으로 방향을 반대로 보고 풀었다. 먼저 dp를 모두 N인 리스트로 초기화해주고, index 1의 값만 0으로 바꿔준다.
1부터 N-1까지 다음을 반복한다.
현재 i에서 3 곱한 것이 N 이하면, graph[i]+1의 값과 graph[i*3] 중 최솟값 취하기
현재 i에서 2 곱한 것이 N 이하면, graph[i]+1의 값과 graph[i*2] 중 최솟값 취하기
현재 i에서 1 더한 것이 N 이하면, graph[i]+1의 값과 graph[i+1] 중 최솟값 취하기
이후 dp 그래프의 마지막 원소인 N번째 index의 값을 출력해주면 된다.
import sys
N = int(sys.stdin.readline())
dp = [N] * (N+1)
dp[1] = 0
for i in range(1,N):
if i*3 <= N:
dp[i*3] = min(dp[i]+1, dp[i*3])
if i*2 <= N:
dp[i*2] = min(dp[i]+1, dp[i*2])
if i+1 <= N:
dp[i+1] = min(dp[i]+1, dp[i+1])
print(dp[-1])
반응형
'algorithm' 카테고리의 다른 글
백준 색종이 코드 및 해설 (파이썬) (0) | 2021.11.03 |
---|---|
프로그래머스 모음사전 코드 및 해설 (파이썬) (0) | 2021.11.03 |
프로그래머스 위클리 챌린지 피로도 코드 및 해설 (파이썬) (0) | 2021.10.26 |
프로그래머스 교점에 별 만들기 코드 및 해설 (파이썬) (0) | 2021.10.13 |
백준 부분수열의 합 코드 및 해설 (파이썬) (0) | 2021.10.11 |