dp로 적당히 뒤집고 설계하니 풀렸다. -1, 3의 곱, 2의곱중 이동횟수가 작은값에 1더해서 저장 + 배열 저장.
N = int(input())
dp = [[0,[]] for _ in range(N+1)]
dp[1][0] = 0
dp[1][1] = [1]
if N>1:
for i in range(2,N+1):
dp[i][0] = dp[i-1][0]+1
dp[i][1] = dp[i-1][1] + [i]
if not i%3 and dp[i//3][0]+1 < dp[i][0]:
dp[i][0] = dp[i//3][0]+1
dp[i][1] = dp[i//3][1]+[i]
if not i%2 and dp[i//2][0]+1 < dp[i][0]:
dp[i][0] = dp[i//2][0]+1
dp[i][1] = dp[i//2][1]+[i]
print(dp[N][0])
print(*dp[N][1][::-1])
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 15685 드래곤커브 (0) | 2021.07.29 |
---|---|
[백준][Python] 1300 K번째 수 : 이분탐색. (0) | 2021.07.29 |
[백준][Python] 1107 리모컨 (0) | 2021.07.28 |
[백준][Python] 6064 카잉달력 : 최소공배수 컨트롤 (0) | 2021.07.28 |
[백준][Python] 1655 가운데를 말해요 : 이중우선순위 큐로 end부분 중앙에 만들기. (0) | 2021.07.28 |