๐ŸŒŸ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ BFS ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ํ•จ์ˆ˜ ์ด ์ •๋ฆฌ!!!!!๐ŸŒŸ

์ฝ”ํ…Œ ์ „์— BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•„์ˆ˜ ์š”์•ฝ ๋ณด๊ณ  ๋“ค์–ด๊ฐ€์„ธ์š”!

๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.

Queue ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

queue์— 2D node๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‹œ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋ฐฉ๋ฒ•.

(ํ˜„์žฌ๊นŒ์ง€ ์ง„ํ–‰ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋กค ํ†ตํ•ด ๋‚ด๋ฆฐ ๊ฒฐ๋ก ์ด๋ฉฐ, ํ–ฅํ›„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.)

  1. from collections import deque

    q = deque()

  2. q.append((sy, sx))

  3. (y, x) = q.popleft()

  4. q.append((ny, nx))

Graph ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

node์™€ edge๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ

13023๋ฒˆ - ABCDE

1260๋ฒˆ - DFS์™€ BFS

11724๋ฒˆ - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

1707๋ฒˆ - ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

# Make Graph
graph=[[]for i in range(node+1)]
for _ in range(edge):
    node1, node2 = map(int,sys.stdin.readline().split())
    graph[node1].append(node2)
    graph[node2].append(node1)

N X M ์ธ์ ‘ ํ–‰๋ ฌ(adjacency matrix)์ด ์ฃผ์–ด์งˆ ๋•Œ

2667๋ฒˆ - ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

2178๋ฒˆ - ๋ฏธ๋กœ ํƒ์ƒ‰

7576๋ฒˆ - ํ† ๋งˆํ† 

7562๋ฒˆ - ๋‚˜์ดํŠธ์˜ ์ด๋™

input = sys.stdin.readline
n = int(input())

graph=[]
for i in range(row):
    line = input().split() # returns list ex>['0110100']
    graph.append([])
    for j in line[0]:
        graph[i].append(int(j))

visited = [[0]*column for _ in range(row)]

๋ฌธ์ œ ์œ ํ˜•

๋ชจ๋“  ๋…ธ๋“œ ๋ฐฉ๋ฌธํ•  ๋•Œ

  • ๋…ธ๋“œ n๊ฐœ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ตฌํ•˜๊ธฐ

13023๋ฒˆ - ABCDE

1. for๋ฌธ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ ๋ฐฉ๋ฌธ 1. DFS: level == n-1์ผ ๋•Œ return
  • ๋ชจ๋“  ๋…ธ๋“œ ๋ฐฉ๋ฌธํ•˜๋ฉฐ ๊ทธ ์ˆœ์„œ ์ถœ๋ ฅํ•˜๊ธฐ

1260๋ฒˆ - DFS์™€ BFS

  1. visited = []์— popํ•œ node๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค
  2. visited๋ฅผ returnํ•œ๋‹ค
  • ์—ฐ๊ฒฐ ์š”์†Œ(connected component)์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

11724๋ฒˆ - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

  1. for๋ฌธ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ ๋ฐฉ๋ฌธ
    1. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธํ•œ๋‹ค
      1. BFS

์ผ๋ถ€ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ๋ฐฉ๋ฌธํ•  ๋•Œ: 2D

๐Ÿ“Œ 1. ๋จผ์ € ์ž์‹ ๋…ธ๋“œ์˜ ์œ„์น˜๊ฐ€ 2D array index ๋ฒ”์œ„ ์•ˆ์— ์œ„์น˜ํ•˜๋Š”์ง€ ์กฐ์‚ฌํ•˜๊ธฐ

โ€‹ โœ”๏ธ ๊ฐ€๋Šฅํ•œ < ๋˜๋Š” >์„ ์‚ฌ์šฉํ•˜์žโ€ผ๏ธ <= ๋˜๋Š” >= ์‚ฌ์šฉ์„ ํ”ผํ•˜์žโ€ผ๏ธ

โ€‹ ์˜ˆ๋ฅผ๋“ค์–ด 0<=ny <= n - 1 ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ , ์˜ˆ๋ฅผ๋“ค์–ด 0<=ny < n ์„ ์‚ฌ์šฉํ•˜์ž.

โ€‹ ์ด์œ ) <=์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ -1 ์—ฐ์‚ฐ์„ ์ถ”๊ฐ€๋กœ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ~ ํšจ์œจ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

โ€‹ โœ”๏ธ์ด ๊ณผ์ •์ด ์„ ํ–‰๋˜์–ด์•ผ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ 2D array index ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” error๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“Œ 2. ์ดํ›„ ์ž์‹ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์กฐ์‚ฌํ•˜๊ณ , ๋™์‹œ์— ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฆฌ์ŠคํŠธ์— ํƒ์ƒ‰ ๋น„์šฉ์„ ์ €์žฅํ•˜์žโ€ผ๏ธ

์ž์‹ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ๋น„์šฉ์ด ๋™์ผํ•  ๋•Œ

๐Ÿ“Œ ๋ชฉํ‘œ node๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ edge๊ฐœ์ˆ˜/์‹œ๊ฐ„/์ด๋™/๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€?

์ฆ‰, ํƒ์ƒ‰ ๊นŠ์ด๋ฅผ countํ•  ๋•Œ

โžก๏ธ ๋™์ผํ•œ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ์ž์‹ ๋…ธ๋“œ๋ผ๋ฉด ๊ฐ™์€ level์„ ๊ฐ€์ง€๋„๋ก ํ•œ๋‹ค.

์ฆ‰, ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ์˜ visited ๊ฐ’์— ๋ถ€๋ชจ ๋…ธ๋“œ์˜ visited ๊ฐ’์— 1์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชฉํ‘œ node์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ visitied์— ์ €์žฅ๋œ level์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ตœ์†Œ edge๊ฐœ์ˆ˜/์‹œ๊ฐ„/์ด๋™/๊ฑฐ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

1D: ๋‹ค์–‘ํ•œ ๋ฐฉํ–ฅ
  • ์ตœ๋‹จ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜๊ฐ€๋Š” ๋…ธ๋“œ๋ฅผ print ํ•˜๊ธฐ

13913๋ฒˆ - ์ˆจ๋ฐ”๊ผญ์งˆ 4

BFS ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ level์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ node๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

๋”ฐ๋ผ์„œ node๋ฅผ popํ•˜์—ฌ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ print ํ•  ์ˆ˜ ์—†๋‹ค.

โžก๏ธ parent list๋ฅผ ๋งŒ๋“ค์–ด์„œ, ์ž์‹ ๋…ธ๋“œ ๋ฐฉ๋ฌธ์‹œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

BFS๋ฅผ ๋งˆ์น˜๊ณ  ๋„์ฐฉํ•œ ๋…ธ๋“œ์˜ parent list ๊ฐ’์„ ํ™•์ธํ•˜์—ฌ ์ด์ „์— ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

2D: ์ขŒ ์šฐ ์ƒ ํ•˜

๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์˜ ์นธ ์ˆ˜ ๊ตฌํ•˜๊ธฐ

  • ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ

2178๋ฒˆ - ๋ฏธ๋กœ ํƒ์ƒ‰

  1. visited = [[0]*node for _ in range(node)]
  2. for ๋ฌธ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ ์กฐ์‚ฌ (if ๋ฌธ์œผ๋กœ ๊ฐ ๊ฒฝ์šฐ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ ธ์„œ ์ž‘์„ฑ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.)
    1. ์ž์‹ ๋…ธ๋“œ์˜ row์™€ column์ด 2D array์˜ Index ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”์ง€ ์กฐ์‚ฌ
      1. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ž์‹ ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธ
        1. visited[child_y][child_x] = visited[parent_y][parent_x] + 1
  • ์—ฐ๊ฒฐ ์š”์†Œ(connected component)์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ

2667๋ฒˆ - ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

  • ์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ๋™์‹œ์— BFS ํƒ์ƒ‰ํ•˜๊ธฐ

โžก๏ธ Queue์•ˆ์— ๋ชจ๋“  ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ฐจ๋ก€๋กœ BFS๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

7576๋ฒˆ - ํ† ๋งˆํ† 

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ฌธ์ œ์—์„  [0,0]๊ณผ [3,5]์— ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ, ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ๊ฐ€ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ๋…ธ๋“œ๋ฅผ queue์— ์˜ฌ๋ ค์„œ BFS๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ์ž์‹ ํ† ๋งˆํ† ๊ฐ€ ์ต๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ฑ„์›Œ์ค€๋‹ค.

๊ทธ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

[[ 1 -1 7 6 5 4] [ 2 -1 6 5 4 3] [ 3 4 5 6 -1 2] [ 4 5 6 7 -1 1]]

2D: ๋‹ค์–‘ํ•œ ๋ฐฉํ–ฅ
  • ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•˜๋Š” ์ตœ์†Œ ์ด๋™ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ

7562๋ฒˆ - ๋‚˜์ดํŠธ์˜ ์ด๋™

dx = [-1,-2,-2,-1,1,2,2,1]
dy = [2,1,-1,-2,-2,-1,1,2]

for i in range(8):
    ny, nx = y + dy[i], x + dx[i]
    if 0 <= nx < l and 0 <= ny < l and visited[ny][nx] == -1:
        q.append((ny, nx))
        visited[ny][nx] = visited[y][x] + 1

์ž์‹ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ๋น„์šฉ์ด ์„œ๋กœ ๋‹ค๋ฅผ ๋•Œ

  • ์ตœ๋‹จ ๊ฒฝ๋กœ์ด๋ฉด์„œ ํƒ์ƒ‰ ๋น„์šฉ์ด ์ตœ์†Œ์ธ ๊ฒฝ๋กœ ๊ตฌํ•˜๊ธฐ

1261 ์•Œ๊ณ ์ŠคํŒŸ, 13549 ์ˆจ๋ฐ”๊ผญ์งˆ 3

โžก๏ธ ํƒ์ƒ‰ ๋น„์šฉ์ด ์ž‘์€ ์ž์‹ ๋…ธ๋“œ๋ฅผ queue์˜ ์•ž์— ์ถ”๊ฐ€ํ•˜๊ณ , ํƒ์ƒ‰ ๋น„์šฉ์ด ํฐ ์ž์‹ ๋…ธ๋“œ๋Š” ๋’ค์— ์ถ”๊ฐ€ํ•œ๋‹ค.

โ€‹ โœ”๏ธ q.appendleft(), q.append() ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ๋น„์šฉ์ด ์ ์€ ๊ฒฝ๋กœ๋ถ€ํ„ฐ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ , ๊ฐ€์žฅ ์ ์€ ๋น„์šฉ์— ๋Œ€ํ•œ ํƒ์ƒ‰์ด ๋๋‚˜๊ณ  ๋‚˜์„œ์•ผ ๋น„๋กœ์†Œ ๋” ํฐ ๋น„์šฉ์˜ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํƒ์ƒ‰ ๋น„์šฉ๊ณผ ๊ธธ์ด๊ฐ€ ์ด ์ตœ์†Œ์ธ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ (Bipartite Graph) ํŒ๋ณ„ํ•˜๊ธฐ

์ด๋ถ„ ๊ทธ๋ž˜ํ”„๋ž€? ๊ทธ๋ž˜ํ”„์˜ ์ •์ ์˜ ์ง‘ํ•ฉ์„ ๋‘˜๋กœ ๋ถ„ํ• ํ•˜์—ฌ, ๊ฐ ์ง‘ํ•ฉ์— ์†ํ•œ ์ •์ ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ์ธ์ ‘ํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„์ด๋‹ค.

1707๋ฒˆ - ์ด๋ถ„ ๊ทธ๋ž˜ํ”„

โžก๏ธ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ž์‹ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ๋น„์šฉ ์ €์žฅ์‹œ, ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’์— -1์„ ๊ณฑํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์ž„์„ ํ‘œ์‹œํ•œ๋‹ค.

๋งŒ์•ฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉฐ, ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ํƒ์ƒ‰ ๋น„์šฉ์ด ๋™์ผํ•˜๋‹ค๋ฉด return false