[๋ฐฑ์ค€-13549] ์ˆจ๋ฐ”๊ผญ์งˆ 3 / Python

๐Ÿ“š Problem Solving/Baekjoon

 

13549๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 3

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ

www.acmicpc.net

from collections import deque

n, k = map(int, input().split())
graph = [0] * 100001

dx = [-1, 1, 2]


def bfs(start):
    queue = deque()
    queue.append(start)
    while queue:
        x = queue.popleft()
        if x == k:
            print(graph[x])
            break
        for i in range(3):
            if i == 2:
                nx = x * dx[i]
            else:
                nx = x + dx[i]
            if 0 <= nx < 100001 and graph[nx] == 0:
                if nx == x * 2 and x != 0:
                    graph[nx] = graph[x]
                    queue.appendleft(nx)
                else:
                    graph[nx] = graph[x] + 1
                    queue.append(nx)


bfs(n)

 

ํ•ด์„ค

์ด์ „ ์‹ค๋ฒ„์—์„œ ํ’€์—ˆ๋˜ ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋‹ค. ๋‹ค๋งŒ 2*x๋งŒํผ ์ด๋™ํ•  ๋•Œ ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด 0์ดˆ๋ผ๋Š” ๋ถ€๋ถ„์—์„œ ๋‹ฌ๋ž๋‹ค. 2*x๋งŒํผ์˜ ์ด๋™์— 0์ดˆ๊ฐ€ ์†Œ์š”๋˜๋ฏ€๋กœ graph[x]์™€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์ €์žฅํ•˜๊ณ  deque์—๋Š” appendleft๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์—ฌ์ค˜์„œ ํ’€์—ˆ๋‹ค.๐Ÿ˜