알고리즘/python

[BFS] 백준 2178번 미로 탐색 [Python]

코카쓰 2025. 4. 4. 16:48
from collections import deque

def makeKey(x ,y):
  return "{}{}{}".format(x, ",", y)

str = input().split(' ')
n = int(str[0])
m = int(str[1])
dx = (-1, 1, 0, 0)
dy = (0, 0, -1, 1)

map = [list(map(int, list(input()))) for i in range(n)]
print(map[6][0])
visit = [[0 for i in range(m)] for i in range(n)]
distance = dict()

x = 0
y = 0

que = deque()
que.append([x, y])
visit[x][y] = 1
distance[makeKey(x, y)] = 1

while True:
  np = que.popleft()
  nx = np[0]
  ny = np[1]
  
  if nx == n - 1 and ny == m - 1:
    break
  
  for i in range(len(dx)):
    pp = [nx + dx[i], ny + dy[i]]
    px = pp[0]
    py = pp[1]
    if px < 0 or px > n-1 or py < 0 or py > m-1: continue
    
    if visit[px][py] == 0:
      visit[px][py] = 1
      if px == 1 and py == 0:
        print()
      if map[px][py] == 1:
        que.append([px, py])
        if makeKey(px, py) not in distance:
          distance[makeKey(px, py)] = distance[makeKey(np[0], np[1])] + 1
        else:
          distance[makeKey(px, py)] = min(distance[makeKey(px, py)], distance[makeKey(np[0], np[1])] + 1)
  
print(distance[makeKey(n-1, m-1)])

 

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

 

기초적인 BFS문제로

키 포인트는 좌표 별 최소 거리값을 저장하는 것이다.

 

x, y좌표를 키값으로 하고 int 값을 갖고 있는 HashMap에 distance 인스턴스에

키: x,y 좌표

값: 해당 좌표의 최소 거리

형태로 저장해 관리했다.