다이나믹 프로그래밍 한접시

[백준] 1로 만들기 2 [Python]

NaZZU 2024. 4. 29. 14:57

 

 

 

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
if __name__ == "__main__":
    num = int(input())
    arr = []
    dp = [00]
 
    for i in range(2, num+1):
        if (i % 6 == 0):
            dp.append(min(dp[int(i / 3)], dp[int(i / 2)]) + 1)
        elif (i % 3 == 0):
            dp.append(min(dp[int(i / 3)], dp[i - 1]) + 1)
        elif (i % 2 == 0):
            dp.append(min(dp[int(i / 2)], dp[i - 1]) + 1)
        else:
            dp.append(dp[i - 1+ 1)
 
    temp = num
    while (temp >= 1):
        if (temp % 6 == 0):
            if (dp[int(temp / 3)] < dp[int(temp / 2)]):
                arr.append(temp)
                temp = int(temp / 3)
            else:
                arr.append(temp)
                temp = int(temp / 2)
        elif (temp % 3 == 0):
            if (dp[int(temp / 3)] < dp[int(temp - 1)]):
                arr.append(temp)
                temp = int(temp / 3)
            else:
                arr.append(temp)
                temp -= 1
        elif (temp % 2 == 0):
            if (dp[int(temp / 2)] < dp[int(temp - 1)]):
                arr.append(temp)
                temp = int(temp / 2)
            else:
                arr.append(temp)
                temp -= 1
        else:
            arr.append(temp)
            temp -= 1
 
    print(dp[num])
    for _ in arr:
        print(_, end=' ')
cs