백준 2178번 바로가기

나의 풀이

# 입력
import sys
read = sys.stdin.readline

n,m = map(int, read().split())
maze = []
for _ in range(n):
  maze.append(list(map(int,read().strip())))

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

# 처리 - bfs 활용

def bfs(x, y):
  from collections import deque
  queue = deque()
  queue.append((x,y))

  while queue:
    x,y = queue.popleft()
    for i in range(4):
      new_x = x+dx[i]
      new_y = y+dy[i]

      if 0<=new_x<n and 0<=new_y<m and maze[new_x][new_y] == 1:
        queue.append((new_x,new_y))
        maze[new_x][new_y] = maze[x][y] + 1

bfs(0,0)
print(maze[n-1][m-1])

CODE REVIEW

  1. 처음에는 DFS을 이용해서 문제를 풀어내려하다가 최적값을 찾는데 애를 먹었다.
  2. 미로찾기 문제에서 최단경로를 찾기 위해서는 BFS가 편리하다.
  3. 어느정도 난이도 있는 문제를 풀 때에 무작정 풀어나가지 말고, 어떤 전략이 나을지 고민해보는 자세를 가지자!