๐ ๋ฐฑ์ค ์จ๋ฐ๊ผญ์ง2
์ฒ์ bfs๋ก ํ์๋ค.
bfs๋ก ํ๋ฉด ๋ช๊ฐ์ง ์ ์ฝ์ด ์๋ ์ง์ฆ๋ฌ๋ ๋ฌธ์ ๋ค
๋ค์ต์คํธ๋ผ๋ก ํ๋ฉด ํน๋ณํ ์กฐ๊ฑด ์์ด ๊ทธ๋ฅ ํ๋ฆฌ์ง๋ง ์ฒ์ ์ ๊ทผ์ bfs๋ก ํ์ฌ์ ๋๊น์ง ๊ณ ์งํ์ง๋ง ๋ถ๋ฌ์ง๋ปํ๋ค...ใ
- BFS ํ์ด
def solve(): # bfs import sys from collections import deque N, K = map(int, sys.stdin.readline().split()) visited = [-1] * 100001 visited[N] = 0 queue = deque() queue.append(N) while queue: cur_po = queue.popleft() if cur_po == K: print(visited[cur_po]) break for i in range(3): if i == 0: n_po = cur_po * 2 elif i == 1: n_po = cur_po - 1 else: n_po = cur_po + 1 if n_po < 0 or n_po >= 100001 or visited[n_po] != -1: continue if i == 0: if n_po != 0: visited[n_po] = visited[cur_po] queue.appendleft(n_po) else: visited[n_po] = visited[cur_po] + 1 queue.append(n_po) if __name__ == "__main__": solve()
๋ฌธ์ ๊ฐ ์ด์ด ์๋๊ฒ ๊ณฑํ๊ธฐ ๋ถ๋ถ์ด ๋จผ์ ๋ค์ด๊ฐ์ผํด์ appendleft๋ฅผ ํด์ฃผ์๋๋ฐ queue์ ๊ณฑํ๊ธฐ ๋ถ๋ถ์ ๋จผ์ ๋ฃ์ด์ฃผ์ง ์์ผ๋ฉด ์๋๋ ์ผ์ด์ค๊ฐ ์๋ค.
์ด๊ฒ๋๋ฌธ์ ์๊ฐ์ ์ข ์์๋ค...ใ
- ๋ค์ต์คํธ๋ผ ํ์ด
def solve(): # Dj import sys import heapq N, K = map(int, sys.stdin.readline().split()) visited = [-1] * 100001 heap = [] heapq.heappush(heap, [0, N]) while heap: cnt, cur_node = heapq.heappop(heap) if cur_node == K: print(cnt) break for i in range(3): if i == 0: n_cnt = cnt n_node = cur_node * 2 elif i == 1: n_cnt = cnt + 1 n_node = cur_node + 1 else: n_cnt = cnt + 1 n_node = cur_node - 1 if n_node < 0 or n_node >= 100001 or visited[n_node] != -1: continue visited[n_node] = cnt heapq.heappush(heap, [n_cnt, n_node]) if __name__ == "__main__": solve()
ํจ์ฌ ์ง๊ด์ ์ด๋ค.