동캄의 코딩도장

백준 12852 [1로 만들기 2] 본문

코테/BOJ

백준 12852 [1로 만들기 2]

동 캄 2022. 2. 11. 22:20

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

 

12852번: 1로 만들기 2

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

www.acmicpc.net

# 백준 12852
n = int(input())
dp = [[] for _ in range(n+1)]

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

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

처음에는 그리디로 접근하였는데, 잘 풀리지 않아 dp로 바꿔서 해결하였다.