Notice
Recent Posts
Recent Comments
Link
코딩 공부
[Python](BFS) 백준 2178번 : 미로 탐색 본문
728x90
< 접근 방법 >
- 미로 모양을 그대로 arr라는 이차원 배열에 입력한다.
- 방문하지 않았던 곳만을 방문하기 위해서 이차원 배열인 visited 배열도 만들어준다.
- 첫 칸에서 시작해서 마지막 칸으로 이동하는 것이 fix되어 있으니까 bfs함수 내의 q에 처음으로 (0, 0)을 넣어준다.
- q를 돌리면서 마지막 칸에 도달하게 된다면 return으로 값을 반환하고 도달 전까지는 visited의 값을 1씩 증가해가며 방문 처리를 해준다.
from collections import deque
def bfs():
q = deque()
q.append((0, 0))
visited[0][0] = 1
while q:
ci, cj = q.popleft()
if (ci, cj) == (N-1, M-1): # 종료조건 : 마지막 칸에 도달했을 시
return visited[ci][cj]
for di, dj in ((-1, 0), (0, 1), (1, 0), (0, -1)): # 상하좌우 탐색
ni = ci + di
nj = cj + dj
# 범위 내, 미방문, arr값 1의 조건을 만족한다면 q에 담고, 방문+1
if 0<=ni<N and 0<=nj<M and not visited[ni][nj] and arr[ni][nj]:
q.append((ni, nj))
visited[ni][nj] = visited[ci][cj] + 1
return "error" # return 값을 써주는 것이 안정적
N, M = map(int, input().split())
# [1] 2차원 형태의 arr배열, visited 배열 생성
arr = [list(map(int, input())) for _ in range(N)]
visited = [[0]*M for _ in range(N)]
# [2] bfs 함수의 return 값을 출력
print(bfs())
이해가 안되는 부분이 있으면 질문 주세요. 감사합니다.
728x90
'BFS & DFS' 카테고리의 다른 글
[Python](DFS/백트래킹) 백준 1759번 : 암호 만들기 (2) | 2024.01.29 |
---|---|
[Python](BFS) 백준 10026번 : 적록색약 (0) | 2024.01.28 |
[Python](BFS) 백준 7569번 : 토마토 (0) | 2024.01.20 |
[Python](BFS) 백준 7576번 : 토마토 (0) | 2024.01.11 |
[Python](BFS) 백준 2667번 : 단지번호붙이기 (0) | 2024.01.02 |