๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/์ฝ”๋“œ์—…(Code up)

[ ํŒŒ์ด์ฌ(python) ] ์ฝ”๋“œ์—… 4503 - ๋ฐ”์ด๋Ÿฌ์Šค(BFS)

by YWTechIT 2021. 4. 15.
728x90

๐Ÿ“Œ ์ฝ”๋“œ์—… 4503 - ๋ฐ”์ด๋Ÿฌ์Šค(BFS)

๋ฌธ์ œ ์„ค๋ช…


๐Ÿ’ก ๋‚˜์˜ ํ’€์ด

์–ด์ œ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ BFS๋กœ ํ’€์–ด๋ดค๋‹ค.

 

DFS๋Š” ํ•œ ๋…ธ๋“œ์—์„œ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ๋” ์—†์„ ๋•Œ๊นŒ์ง€ ๋๊นŒ์ง€ ํŒŒ๊ณ  ๋“ค์–ด๊ฐ€๋Š”๋ฐ, BFS๋Š” ํ•œ ๋…ธ๋“œ์—์„œ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ฃผ๋ณ€ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š”๋‹ค.


BFS๋Š” Queue๋ฅผ ์ด์šฉํ•ด์„œ ํ’€๋ฉด ๋˜๋Š”๋ฐ, ์–ด์ œ์ฒ˜๋Ÿผ flag, checkํ˜•์‹์œผ๋กœ ํ’€์–ด๋ณด์ž.

BFS๋ฐฉ์‹์˜ ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.(Queue๋Š” ์„ ์ž…์„ ์ถœ์ž„์„ ๊ธฐ์–ตํ•˜์ž.)

  1. ์‹œ์ž‘ํ•˜๋Š” ๊ฐ’์„ Queue์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  2. Queue์•ˆ์— ํ˜„์žฌ ๋“ค์–ด์žˆ๋Š” ๊ฐ’(๋…ธ๋“œ)์„ ๋บ€๋‹ค.
  3. ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘์—์„œ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ๋„ฃ๋Š”๋‹ค.
  4. 2~3๋ฒˆ์˜ ๊ณผ์ •์„ ๋” ์ด์ƒ ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Flag, Check๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Flag
    C์™€ ๋™์ผํ•œ ๋ฒ”์œ„ ์ „์ฒด๋ฅผ False๋กœ ์„ ์–ธํ•ด๋†“๊ณ , ํ˜„์žฌ Queue์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฐ’์„ ๊บผ๋ƒˆ์„ ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด(ํ•ด๋‹น ๊ฐ’์ด False์ด๋ฉด) True๋กœ ๋งŒ๋“ ๋‹ค.
    while๋ฌธ์ด๋ฏ€๋กœ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•œ ๊ฐ’์€ pop์‹œํ‚ค๊ณ  Queue์— ๋‚จ์•„์žˆ๋Š” ๊ฐ’์„ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•œ๋‹ค.(Queue๊ฐ€ ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€)
  1. Check
    ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•˜๊ณ  ํ˜„์žฌ Queue์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฐ’์„ ๊บผ๋ƒˆ์„ ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด(๋นˆ ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹น ๊ฐ’์ด ์—†์œผ๋ฉด) ๋นˆ ๋ฆฌ์ŠคํŠธ์— ํ˜„์žฌ ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ๋นˆ ๋ฆฌ์ŠคํŠธ์— appendํ•œ ๊ฐ’์€ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.
    while๋ฌธ์ด๋ฏ€๋กœ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ ๊ฐ’์€ pop์‹œํ‚ค๊ณ  Queue์— ๋‚จ์•„์žˆ๋Š” ๊ฐ’์„ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•œ๋‹ค.(Queue๊ฐ€ ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€)

์ดํ›„์— bfs์ˆœ์œผ๋กœ ๋‚˜์˜จ ๊ฐ’์„ len์œผ๋กœ ๋Œ๋ ค ์ถœ๋ ฅํ•˜๋ฉด ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” 1๋ฒˆ ์ปดํ“จํ„ฐ๋ฅผ ํ†ตํ•ด ์›œ ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ ์ž์‹ ์˜ ๊ฐ’์€ ์ œ์™ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ len-1์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ž.

# 1. Flag ๋ฐฉ์‹
from collections import deque

def bfs(graph, start):  # bfs ๊ตฌํ˜„
    queue = deque([start])
    visited[start] = True

    while queue:
        v = queue.popleft()
        result.append(v)  # ์‹œ์ž‘ ๊ฐ’ ์ถ”๊ฐ€
        for i in graph[v]:
            if not visited[i]:
                queue.append(i) # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ถ”๊ฐ€
                visited[i] = True

C = int(input())
NC = int(input())
graph = [[] for _ in range(C+1)]
result = []
visited = [False] * (C+1)

for i in range(NC):  # ์ž…๋ ฅ๊ฐ’ ๋…ธ๋“œ ๋ณ€ํ™˜
    node1, node2 = map(int, input().split())
    graph[node1].append(node2)
    graph[node2].append(node1)

bfs(graph, 1)
print(len(result)-1)

# 2. ๋‹จ์ˆœ ํ™•์ธ(check) ๋ฐฉ์‹
from collections import deque

def bfs(graph, start):  # bfs ๊ตฌํ˜„
    queue = deque([start])
    visited.append(start)  # ์‹œ์ž‘ ๊ฐ’ ์ถ”๊ฐ€

    while queue:
        v = queue.popleft()
        for i in graph[v]:
            if i not in visited:
                visited.append(i) 
                queue.append(i)  # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ ์ถ”๊ฐ€

C = int(input())
NC = int(input())
graph = [[] for _ in range(C+1)]
visited = []

for i in range(NC):
    node1, node2 = map(int, input().split())
    graph[node1].append(node2)
    graph[node2].append(node1)

bfs(graph, 1)
print(len(visited)-1)
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€