๋ฌธ์
https://www.acmicpc.net/problem/12852
12852๋ฒ: 1๋ก ๋ง๋ค๊ธฐ 2
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 106๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ค.
www.acmicpc.net
ํ์ด
BFS๋ฅผ ์ด์ฉํ ํ์ด
# ๋ฐฑ์ค 12852๋ฒ ๋ฌธ์ - 1๋ก ๋ง๋ค๊ธฐ 2
from collections import deque
n = int(input())
q = deque()
q.append((n,[n]))
visited = [0]*(n+1)
while q:
num,ans = q.popleft()
if num == 1:
print(len(ans)-1)
print(*ans)
break
if not visited[num]:
visited[num]=1
if num%3==0:
q.append((num//3,ans+[num//3]))
if num%2==0:
q.append((num//2,ans+[num//2]))
q.append((num-1,ans+[num-1]))
DP๋ฅผ ์ด์ฉํ ํ์ด๋ ์๋๋ฐ ์ดํด๊ฐ ์ ๋์ง ์์์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค.
import sys
input = sys.stdin.readline
n = int(input())
dp = [[0, []] for _ in range(n + 1)]
dp[1][0] = 0
dp[1][1] = [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 i % 3 == 0 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 i % 2 == 0 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(*reversed(dp[n][1]))
'๐๏ธ Algorithm > ๐ฉ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฉ [๋ฐฑ์ค] [Python] 1932๋ฒ_์ ์ ์ผ๊ฐํ (0) | 2022.11.21 |
---|---|
๐ฉ [๋ฐฑ์ค] [Python] 9933๋ฒ_๋ฏผ๊ท ์ด์ ๋น๋ฐ๋ฒํธ (0) | 2022.11.21 |
๐ฉ [๋ฐฑ์ค] [Python] 16953๋ฒ_A->B (0) | 2022.11.19 |
๐ฉ [๋ฐฑ์ค] [Python] 1946๋ฒ_์ ์ ์ฌ์ (0) | 2022.11.19 |
๐ฉ [๋ฐฑ์ค] [Python] [ํ] 16927๋ฒ_๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2022.11.18 |