2021. 4. 15. 16:00ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅํ์
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅํ์
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋์งธ ์ค์ ์ด๋ป๊ฒ ์ด๋ํด์ผ ํ๋์ง ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
์ด์ ์ ํ์๋ ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์์ path ๊ฒฝ๋ก๋ ์ถ๋ ฅ์ ๊ฐ์ด ํด์ผ ํ๋ ๋ฌธ์ ์๋ค.
์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ์ด์ ๊ฐ์์ +1์ ํด์ค ๊ฒ์ ์์ด๋์ด๋ก visited_path ๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๊ฑฐ๊ธฐ๋ค๊ฐ ์ด์ ์ด๋ ๊ฐ์ ๋ฃ์ด์ฃผ์๋ค.
๊ทธ๋ค์ ์ฌ๊ทํจ์๋ก ํ๊ณ ํ๊ณ ์ด์ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ ํ์์ผ๋ก ๊ตฌํํ๋ค.
def bfs(n, k):
queue = deque([n])
visited[n] = True
dist_value[n] = str(n)
while queue:
now = queue.popleft()
for move in [now+1, now-1, now*2]:
if 0 <= move < MAX and not visited[move]:
visited[move] = True
dist_value[move] = now
queue.append(move)
dist[move] = dist[now]+1
return dist[k]
def print_path(n,k):
if n!=k:
print_path(n, dist_value[k])
print(k, end=' ')
if __name__ == '__main__':
n, k = map(int,input().split())
MAX = 200000
sys.setrecursionlimit(MAX)
visited = [False]* (MAX+1)
dist = [0]* (MAX+1)
dist_value = [0] * (MAX+1)
print(bfs(n,k))
print_path(n,k)
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ๋ฐฑ์ค 14226] ์ด๋ชจํฐ์ฝ (0) | 2021.04.15 |
---|---|
[Python - ๋ฐฑ์ค 1697] ์จ๋ฐ๊ผญ์ง (0) | 2021.04.15 |
[Python - ๋ฐฑ์ค 14888] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2021.04.14 |