Python/백준

12582_1로 만들기 2

728x90

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

 

12852번: 1로 만들기 2

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

www.acmicpc.net

 

이전에 풀어보았었던 내용이지만 값이 엄청 커졌다.

 

 

dp를 활용해서 푸니까 잘 풀렸다.

 

1부터 시작해서 *2, *4, +1 을 해서 저장된 값보다 길이가 적으면 그 값들을 리스트형태로 전달하게 해주었다.

 

n = int(input())
dp = [ [] for i in range(n+1) ]
dp[1].append(1)

for i in range(1,n+1):

    LEN = len(dp[i])
    if i*3 <= n:
        if len(dp[i*3]) == 0 or LEN <len(dp[i*3]) :
            dp[i*3] =  [i*3] +dp[i]
    if i*2 <= n:
        if len(dp[i*2]) == 0 or LEN <len(dp[i*2]) :
            dp[i*2] = [i*2] +  dp[i]
    if i+1 <= n:
        if len(dp[i+1]) == 0 or LEN <len(dp[i+1]) :
            dp[i+1] = [i+1] + dp[i]

print(len(dp[n])-1)
for i in dp[n]:
    print(i,end=' ')

 

728x90

'Python > 백준' 카테고리의 다른 글

14003_ 가장 긴 증가하는 수열  (0) 2022.04.23
14002_가장 긴 증가하는 수열  (0) 2022.04.20
1450_냅색문제  (0) 2022.04.18
1644_소수의 연속합  (0) 2022.04.17
1806_부분합  (0) 2022.04.16