-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path1463.py
86 lines (65 loc) · 1.63 KB
/
1463.py
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# bottom-up
n = int(input())
dp = [0 for x in range(n+1)]
for i in range(2, n+1):
dp[i] = dp[i - 1] + 1
if i % 2 == 0:
dp[i] = min(dp[i], dp[i // 2] + 1)
if i % 3 == 0:
dp[i] = min(dp[i], dp[i // 3] + 1)
print(dp[n])
# top-down(but, runtime error)
import sys
sys.setrecursionlimit(100000000)
n = int(input())
dp = [None for x in range(n+1)]
dp[0] = 0
dp[1] = 0
def calc_dp(i):
if dp[i] is None:
dp[i] = calc_dp(i - 1) + 1
if i % 2 == 0:
dp[i] = min(dp[i], calc_dp(i // 2) + 1)
if i % 3 == 0:
dp[i] = min(dp[i], calc_dp(i // 3) + 1)
return dp[i]
print(calc_dp(n))
# dp = [0,0] # 시작 위치는 0,0으로 설정, 동전 문제 푸는 것과 유사하게 접근함
#
# n = int(input())
#
# for i in range(2,n+1): # 2부터 n 까지 수열 정리
# temp = []
# temp.append(dp[i-1]+1) # 1차이는 무조건 되니까 넣고
# if i % 2 == 0:
# temp.append(dp[i//2]+1) # 2로 나누어 떨어지는지는 확인
# if i % 3 == 0:
# temp.append(dp[i//3]+1) # 3으로 나누어 떨어지는지도 확인
# dp.append(min(temp)) # 그 중 최소값
# print(dp[n]) # n번째 출력
'''
참고한 코드
a = int(input())
count = 0
minimum=[a]
def cal(a):
list = []
for i in a:
list.append(i-1)
if i%3 == 0:
list.append(i/3)
if i%2 == 0:
list.append(i/2)
return list
while True:
if a == 1:
print(count)
break
temp = minimum[:]
minimum = []
minimum = cal(temp)
count +=1
if min(minimum) == 1:
print(count)
break
'''