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