반응형
1. 문제
https://www.acmicpc.net/problem/1463
2. 코드
n = int(input())
dp = [0 for i in range(n+1)]
for i in range(2, n+1):
dp[i] = dp[i-1] + 1
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])
3. 알고리즘
점화식 : dp[N] = min(dp[N-1], dp[N//2] , dp[N//3]) + 1
1) 1을 빼준 경우를 우선 저장해놓는다.
2) 3으로 나뉠 경우, 1을 빼준 경우와 비교해서 최솟값을 저장한다.
3) 2로 나뉠 경우, 1을 빼준 경우(만약 2)에서 3으로 나뉜 경우로 바뀌었다면, 3으로 나뉜 경우)와 비교해서 최솟값을 저장한다.
(dp 문제는 점화식을 찾는게 포인트이다,,,, 나의 첫 dp 문제,,, 아주 많이 헤맸다,,,)
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 4948번 - 베르트랑 공준 (파이썬) (0) | 2021.11.08 |
---|---|
[백준] 11650번 - 좌표 정렬하기 (파이썬) (feat. lambda) (0) | 2021.11.08 |
[백준] 2108번 - 통계학 (파이썬 풀이) (feat. collections, sys) (0) | 2021.11.07 |
[백준] 10989번 - 수 정렬하기 3 (파이썬) (feat. 정렬하지 않고 정렬하기,,?) (0) | 2021.11.07 |
[백준] 2751번 - 수 정렬하기 2 (파이썬 코드) (feat. sys.stdin / sys.stdout) (0) | 2021.11.07 |