์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[๋ฐฑ์ค€] 13549๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 3

๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ


๐Ÿ“ƒ ๋ฌธ์ œ

https://www.acmicpc.net/problem/13549

 

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

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

www.acmicpc.net


โœ ํ’€์ด๊ณผ์ •

import sys
from collections import deque
MAX = 100001

n, k = map(int, input().split())
queue = deque([n])
dist = [-1]*MAX
dist[n] = 0

while queue:
    i = queue.popleft()

    if i == k:
       print(dist[i])
       break

    if i*2 < MAX and dist[i*2] == -1:
        queue.appendleft(i*2)
        dist[i*2] = dist[i]
    if i-1>=0 and dist[i-1] == -1:
        queue.append(i-1)
        dist[i-1] = dist[i] + 1
    if i+1< MAX and dist[i+1] == -1:
        queue.append(i + 1)
        dist[i+1] = dist[i] + 1

์˜›๋‚ ์— ํ’€์–ด๋ณธ ๋ฌธ์ œ์˜€๊ณ  bfs๋กœ ํ’€์—ˆ๋‹ค.

 

(๋ฌธ์ œ A->B)์—์„œ๋Š” +"1"๊ณผ *2๋ฐ–์— ์—†์–ด์„œ ๋’ค๋กœ ๋Œ์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ๋ฐ˜๋ฉด์—

์ด ๋ฌธ์ œ๋Š” -1๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— dist๋ฅผ ๋‘์–ด ํ•ด๋‹น ์œ„์น˜์— ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

* (3 -> 4 -> 3) ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ

 

(*2)๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ดˆ๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ appendleft๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.