GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 2178번 파이썬

gogi masidda 2022. 8. 22. 19:58

문제 링크

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

 

7576번 토마토 문제와 유사하다.

앞에서 선언한 미로의 크기에서만 움직일 수 있도록 if 문을 사용하였다.

그리고 (0,0)에서 한 칸씩 나아갈 때마다 그 미로 칸의 값에 +1씩 해주어 최종적으로 마지막 칸에 도착했을 때의 값을 출력하면 얼마나 이동했는지 알 수 있다.

 

정답 코드

import sys
from collections import deque

def bfs(x,y):
  dx = [-1,1,0,0]
  dy = [0,0,-1,1]

  queue = deque()
  queue.append((x, y))
  
  while queue:
    x,y = queue.popleft()
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]
      
      if 0<=nx<N and 0<=ny<M:
        if graph[nx][ny] == 1:
          graph[nx][ny] = graph[x][y] + 1
          queue.append((nx,ny))
          
  return graph[N-1][M-1] #마지막 미로 칸 값 리턴
  
graph = []
N, M = map(int,sys.stdin.readline().split())


for _ in range(N):
  graph.append(list(map(int, sys.stdin.readline().rstrip())))

print(bfs(0,0))
728x90