티스토리 뷰

알고리즘

백준 2178 - 파이썬

취뽀가자!! 2023. 4. 25. 22:56

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

 

2178번: 미로 탐색

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

www.acmicpc.net

이번 문제 역시 아직 bfs에 익숙하지 않기 때문에 다른 사람의 풀이를 보며 유형을 익힌다는 느낌으로 찾아보았다. 

from collections import deque

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

graph = []

for _ in range(n):
  graph.append(list(map(int, input())))

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 nx < 0 or nx >= n or ny < 0 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))

위 코드에서 핵심은 dx와 dy를 별도로 설정해서 상, 하, 좌, 우를 정의해주고 시작했다는 점인거 같다. 이러한 유형의 문제들은 dx와 dy를 별도로 설정해서 풀어주면 풀 수 있을거 같다.

'알고리즘' 카테고리의 다른 글

백준 1012 - 파이썬  (0) 2023.04.29
백준 2667 - 파이썬  (0) 2023.04.26
백준 1260 - 파이썬  (0) 2023.04.25
백준 2437 - 파이썬  (2) 2023.04.24
백준 2212 - 파이썬  (0) 2023.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함