BFS ๋ฌธ์ œ (๋ฏธ๋กœ ํƒˆ์ถœ) - ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค

2020. 8. 25. 20:22ใ†์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค/DFS,BFS

BFS ๋ฌธ์ œ (๋ฏธ๋กœ ํƒˆ์ถœ) - ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค

 

๋™๋นˆ์ด๋Š” N x M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜€ ์žˆ๋‹ค. ๋ฏธ๋กœ์—๋Š” ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ์˜ ๊ดด๋ฌผ์ด ์žˆ์–ด ์ด๋ฅผ ํ”ผํ•ด ํƒˆ์ถœํ•ด์•ผ ํ•œ๋‹ค. ๋™๋นˆ์ด์˜ ์œ„์น˜๋Š” (1,1)์ด๊ณ  ๋ฏธ๋กœ์˜ ์ถœ๊ตฌ๋Š” (N,M)์˜ ์œ„์น˜์— ์กด์žฌํ•˜๋ฉฐ ํ•œ๋ฒˆ์— ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๊ดด๋ฌผ์ด ์žˆ๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ, ๊ดด๋ฌผ์ด ์—†๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” ๋ฐ˜๋“œ์‹œ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ œ์‹œ๋œ๋‹ค. ์ด๋•Œ ๋™๋นˆ์ด๊ฐ€ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. ์นธ์„ ์…€ ๋•Œ๋Š” ์‹œ์ž‘์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์„ ๋ชจ๋‘ ํฌํ•จํ•ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค.

 

์ž…๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(4 <= M, M<= 200)์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ๊ฐ M๊ฐœ์˜ ์ •์ˆ˜(0 ํ˜น์€ 1)๋กœ ๋ฏธ๋กœ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๊ณต๋ฐฑ ์—†์ด ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ œ์‹œ๋œ๋‹ค. ๋˜ํ•œ ์‹œ์ž‘ ์นธ๊ณผ ๋งˆ์ง€๋ง‰ ์นธ์€ ํ•ญ์ƒ 1์ด๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด

  • ์ฒซ์งธ ์ค„์— ์ตœ์†Œ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…๋ ฅ ์˜ˆ์‹œ
5 6
101010
111111
000001
111111
111111
์ถœ๋ ฅ ์˜ˆ์‹œ
10





 

์ด ๋ฌธ์ œ๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. DFS๋กœ๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ? ํ•„์ž๊ฐ€ ๋ณด๊ธฐ์—๋Š” ํž˜๋“ค์–ด ๋ณด์ธ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œ์™€ ์ƒ๊ด€์—†์ด ๊นŠ์ด๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ์œ ํ˜•์˜ ๋ฌธ์ œ๋Š” BFS๋ฅผ ์ด์šฉํ•œ๋‹ค. BFS๋ฅผ ์ด์šฉํ•˜๋ฉด ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒœ์ฒœํžˆ ๋ชจ๋“  ๊ณณ์„ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฒซ๋ฒˆ์งธ ์•„์ด๋””์–ด๋Š” BFS๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

 

๋ฌธ์ œ๋ฅผ BFS๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค๋Š” ๊ฒƒ์€ ์•Œ๊ฒ ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ?

๋ฌธ์ œ์—์„œ ์ฒ˜์Œ์€ (1,1)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ณณ๋ถ€ํ„ฐ (x-1,y), (x+1,y), (x,y-1), (x,y+1)์ด๋™ํ•œ ๊ฐ’์„ ๊ธฐ์กด์˜ ๊ฐ’์— +1์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด ์ขŒํ‘œ๋“ค์„ ๋„ฃ๋Š”๋‹ค๋ฉด, ํ์— ๋“ค์–ด๊ฐ„ ๊ฒƒ๋“ค๋ถ€ํ„ฐ ํƒ์ƒ‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ๊ฐ์˜ ๊ธธ์— ๋Œ€ํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

์ฝ”๋“œ๋กœ ํ™•์ธํ•ด๋ณด์ž.

from collections import deque

n,m = map(int,input().split())

graph = []
for i in range(n):
  graph.append(list(map(int,input())))
  
def bfs(x,y):
  queue = deque()
  queue.append((x,y))
  
  dx = [-1,1,0,0]
  dy = [0,0,-1,1]
  
  while queue:
    x,y = queue.popleft
  
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]
    
      if nx <=-1 or ny <=-1 or nx >=n or ny >=m:
        continue
      if graph[nx][ny] == 0:
        continue
      if graph[nx][ny] == 1:
        graph[nx][ny] = graph[x][y] + 1
        queue.append((nx,ny))
  return graph[n-1][m-1]

print(bfs(0,0))
  

๋ฌธ์ œ๋Š” 1,1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์™œ print์•ˆ์—๋Š” 0,0์ด ๋“ค์–ด๊ฐˆ๊นŒ? ๋ฌธ์ œ์—์„œ 1,1์€ ์‹ค์ œ ๋ฐฐ์—ด์—์„œ์˜ 0,0๊ณผ ๊ฐ™๋‹ค. ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์‹ค์ œ ์ตœ์†Œ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” 0,0์„ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๋‹ค.