티스토리 뷰
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
1. 문제 내용
2. 접근 방식
- 너비 우선 탐색 사용
(1, 1)에서 상하좌우 인접한 칸을 확인하면서 너비 우선 탐색을 한다.
- 칸 수는 visited 2차원 리스트로 카운트한다.
(1, 1)의 첫 번째로 방문하는 칸이고, 상하좌우에 붙어 있는 칸을 방문한다면 그것은 두 번째로 방문하는 칸이다. 즉, visited[0][0] = 1이면, 우측에 있는 칸을 방문한다면 visited[0][1] = visited[0][0] + 1 = 1 + 1 = 2로 계산된다.
** 편의상 (1, 1)칸은 (0, 0)칸으로, (N, M)칸은 (N-1, M-1)칸으로 코드를 작성하였다.
3. 정답 코드
from collections import deque
def bfs(i, j):
visited[i][j] = 1 # 방문 처리
queue = deque([[i, j]])
while queue:
x, y = queue.popleft()
for d in directions:
dx = x + d[0]
dy = y + d[1]
if dx >= n or dx < 0 or dy >= m or dy < 0:
continue
if not visited[dx][dy] and maps[dx][dy]:
visited[dx][dy] = visited[x][y] + 1
queue.append([dx, dy])
return visited[n-1][m-1]
# main
n, m = map(int, input().split())
maps = [list(map(int, input())) for _ in range(n)]
visited = [[0] * m for _ in range(n)]
directions = [[-1, 0], [1, 0], [0, -1], [0, 1]] # up - down - left - right
print(bfs(0, 0))
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1012번 유기농 배추 파이썬 정답 코드 (0) | 2023.05.23 |
---|---|
[백준] 2667번 단지번호 붙이기 파이썬 정답 코드 (0) | 2023.05.23 |
[백준] 1003번 피보나치 함수 파이썬 정답 코드 (0) | 2023.05.21 |
[백준] 1260번 DFS와 BFS 파이썬 정답 코드 (0) | 2023.05.21 |
[백준] 2606번 바이러스 파이썬 정답 코드 (0) | 2023.05.21 |