์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ’ก

์†ก์•„์ง€ ์ฐพ๊ธฐ (BFS)

@ENFJ 2025. 3. 10. 22:22

์†ก์•„์ง€ ์ฐพ๊ธฐ (BFS: Breadth First Search) ๋ฌธ์ œ๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ **๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)**์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์˜ˆ์š”.

 

์ „์ฒด์ฝ”๋“œ

import sys
from collections import deque
sys.stdin = open("C:/Users/csh/Documents/์ฝ”๋”ฉํ…Œ์ŠคํŠธ/BFS/input.txt", "r")
# 5 14 
# ์†ก์•„์ง€ ์ฐพ๊ธฐ (BFS)

MAX = 10000
ch = [0] * (MAX + 1) # ๋ฐฉ๋ฌธ์—ฌ๋ถ€ ํ™•์ธ
dis = [0] * (MAX + 1) # ์†ก์•„์ง€๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ

n,m = map(int,input().split()) #   n: ํ˜„์ˆ˜์˜ ์œ„์น˜, m: ์†ก์•„์ง€์˜ ์œ„์น˜

ch[n] = 1 # ํ˜„์ˆ˜์˜ ์œ„์น˜ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
dis[n] = 0 # ํ˜„์ˆ˜์˜ ์œ„์น˜๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋Š” 0

dq = deque() # deque ์ƒ์„ฑ
dq.append(n) # ํ˜„์ˆ˜์˜ ์œ„์น˜๋ฅผ deque์— ๋„ฃ๊ธฐ

while dq: # deque๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

    now = dq.popleft() # ํ˜„์ˆ˜์˜ ์œ„์น˜๋ฅผ deque์—์„œ ๊บผ๋‚ด๊ธฐ

    if now == m: # ์†ก์•„์ง€์˜ ์œ„์น˜์— ๋„์ฐฉํ•˜๋ฉด ์ข…๋ฃŒ
        break # ์†ก์•„์ง€์˜ ์œ„์น˜์— ๋„์ฐฉํ•˜๋ฉด ์ข…๋ฃŒ

    for next in (now -1, now +1 , now +5): # ์„ธ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜
        if 0 < next <= MAX: # ๋ฒ”์œ„์•ˆ์— ์žˆ์„๋•Œ
            if ch[next] == 0: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
                dq.append(next) # deque์— ๋„ฃ๊ธฐ
                ch[next] = 1 # ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
                dis[next] = dis[now] + 1 # ๊ฑฐ๋ฆฌ๊ณ„์‚ฐ

print(dis[m]) # ์†ก์•„์ง€๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ์ถœ๋ ฅ

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช…

์ˆ˜์ง์„  ์œ„์— ํ˜„์ˆ˜์™€ ์†ก์•„์ง€๊ฐ€ ์œ„์น˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜„์ˆ˜๋Š” ํ˜„์žฌ ์  N์— ์žˆ๊ณ , ์†ก์•„์ง€๋Š” ์  M์— ์žˆ์–ด์š”.
  • ํ˜„์ˆ˜๋Š” +1, -1, ×2 ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ์ด๋™์œผ๋กœ ์†ก์•„์ง€์—๊ฒŒ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (BFS ํ™œ์šฉ)

BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” "์ตœ๋‹จ ๊ฑฐ๋ฆฌ"๋ฅผ ์ฐพ๋Š” ๋ฐ ์ตœ์ ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.
DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)๋Š” ํŠน์ • ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ํ›„ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฌธ์ œ์— ์ ํ•ฉํ•˜์ง€ ์•Š์•„์š”.

BFS์—์„œ๋Š” ํ(Queue)๋ฅผ ํ™œ์šฉํ•ด์„œ ํ•œ ๋‹จ๊ณ„์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  1. ํ(Queue) ์ดˆ๊ธฐํ™”
    • Queue์— ํ˜„์ˆ˜์˜ ์‹œ์ž‘ ์œ„์น˜(N)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์‹œ์— ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  visited ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. BFS ํƒ์ƒ‰ ์‹œ์ž‘
    • while๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
    • ํ˜„์žฌ ์œ„์น˜์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 3๊ฐ€์ง€ ๊ฒฝ์šฐ (+1, -1, ×2)๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ์†ก์•„์ง€ ์œ„์น˜(M)์— ๋„์ฐฉํ•˜๋ฉด ๋ฐ”๋กœ ์ข…๋ฃŒํ•˜๊ณ  ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์œ„์น˜๋Š” ํ์— ์ถ”๊ฐ€ํ•˜๊ณ , visited ๋ฐฐ์—ด์— ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์ตœ์†Œ ํšŸ์ˆ˜ ๋ฐ˜ํ™˜
    • BFS์˜ ํŠน์„ฑ์ƒ ์ฒ˜์Œ M์„ ์ฐพ๋Š” ์ˆœ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ, ๋ฐ”๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.