Hikenny25

1463 - 1로 만들기 본문

baekjoon (solved.ac)/class 3 Solve

1463 - 1로 만들기

hikenny 2022. 10. 25. 18:35

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

 

- Dynamic Programming

 

import sys
input = sys.stdin.readline

n = int(input())

dp = [0] * (n+4)
dp[2] = dp[3] = 1

for i in range(4, n+1):
    if i % 3 == 0 and i % 2 == 0:
        dp[i] = min(dp[i-1], dp[i//2], dp[i//3]) + 1
    elif i % 3 == 0:
        dp[i] = min(dp[i-1], dp[i//3]) + 1
    elif i % 2 == 0:
        dp[i] = min(dp[i-1], dp[i//2]) + 1
    else:
        dp[i] = dp[i-1] + 1

print(dp[n])

감격스럽다

새로운 dp 유형이었는데 빠르게 풀어냈다 ㅎㅎ

 

if~elif~else 문으로 점화식을 만든건 좀 안 이쁘지만..

어쨌든 정답!!!!

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

2606 - 바이러스  (0) 2022.10.25
2579 - 계단 오르기  (0) 2022.10.25
17219 - 비밀번호 찾기  (1) 2022.10.25
11399 - ATM  (0) 2022.10.25
11047 - 동전 0  (0) 2022.10.25
Comments