본문 바로가기
Problem Solving/BOJ

[Python]1463. 1로 만들기

by 부르르 2019. 4. 2.

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

 

1463번: 1로 만들기

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

www.acmicpc.net


 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#Top-down 방식 : 재귀호출 이용
import sys
sys.setrecursionlimit(10000000#재귀 한도를 늘려준다. RecursionError 방지
 
def dp(x):
    if x == 1:
        m[x] = 0
        return m[x]
 
    if m[x] > 0:
        return m[x]
 
    m[x] = dp(x-1)+1 # 빼기 1 연산, 메모이제이션 + 초기화 기능
 
    if x % 3 == 0# 나누기 3 연산, 메모이제이션
        div3 = dp(x//3)+1
        m[x] = min(m[x], div3)
 
    if x % 2 == 0# 나누기 2 연산. 메모이제이션
        div2 = dp(x//2)+1
        m[x] = min(m[x], div2)
 
    return m[x]
 
= int(input())
= [0]*(10**6+1)
answer = dp(x)
print(answer)
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Bottom-up 방식 : for 문 이용
x=int(input())
dp=[0]*(x+1)
dp[1= 0
for i in range(2,x+1):
    dp[i] = dp[i-1]+1
    if i % 3 == 0:
        div3 = dp[i//3]+1
        dp[i] = min(div3, dp[i])
    if i % 2 == 0:
        div2 = dp[i//2]+1
        dp[i] = min(div2, dp[i])
print(dp[x])
 
'''
# input
572
# output
10
# solution
572 571 570 190 189 63 21 7 6 3 1
'''
cs
728x90
반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[Python]15990. 1,2,3 더하기 5  (2) 2019.04.03
[Python]16194. 카드 구매하기 2  (0) 2019.04.03
[Python]3055. 탈출  (0) 2019.04.02
[Python]2206. 벽 부수고 이동하기  (0) 2019.04.02
[Python]1261. 알고스팟  (0) 2019.04.02

댓글