백준에서 문제 보기 : https://www.acmicpc.net/problem/1463
난이도
실버 3
알고리즘
1) 0으로 리스트 초기화
2) 점화식 이용
f(x - 1) + 1
f(x / 2) + 1
f(x / 3) + 1
최소값 구하기
해결 방안
문제에서 요구하는 사항은 'DP(Dynamic programming)'를 구현하여 해결하는 개념을 요구합니다.
import sys
input = sys.stdin.readline
N = int(input())
dp = [0 for _ in range(N+1)]
for i in range(1, N+1):
if i == 1:
dp[i] = 0
continue
dp[i] = dp[i - 1] + 1
if i % 3 == 0 and dp[i // 3] + 1 < dp[i]:
dp[i] = dp[i // 3] + 1
if i % 2 == 0 and dp[i // 2] + 1 < dp[i]:
dp[i] = dp[i // 2] + 1
print(dp[N])
출력
리스트를 쓰지 않고 구현했다가는 시간초과 나기 쉽상이다
'코딩테스트' 카테고리의 다른 글
백준(Baekjoon) 1874번 : 스택 수열 with Python (0) | 2021.01.22 |
---|---|
백준(Baekjoon) 1080번 : 행렬 with Python (0) | 2021.01.22 |
백준(Baekjoon) 11399번 : ATM with Python (0) | 2021.01.21 |
[Baekjoon] 백준 11047번 : 동전 0 with Python (0) | 2021.01.21 |
[Baekjoon] 백준 9012번 : 괄호 with Python (0) | 2021.01.21 |
댓글