2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
나의 코드
# 미로탐색
from collections import deque
N, M = map(int, input().split())
arr = [list(map(int, input())) for _ in range(N)]
visited = [[0]*M for _ in range(N)] # arr와 같은 빈 행렬 만들기
# print(arr)
di = [0, 1, 0, -1] #우, 하, 좌, 상 방향설정
dj = [1, 0, -1, 0]
def maze(si, sj):
q = deque()
q.append((si, sj))
visited[si][sj] = 1
while q:
x, y = q.popleft()
for k in range(4):
new_i = x + di[k]
new_j = y + dj[k]
if 0 <= new_i < N and 0 <= new_j < M:
if arr[new_i][new_j] == 1 and visited[new_i][new_j] == 0:
visited[new_i][new_j] = visited[x][y] + 1
q.append((new_i, new_j))
if new_i == N-1 and new_j == M-1:
return visited[new_i][new_j]
print(maze(0,0))
결과

bfs에 대해 잘 알 수 있는 문제였다. 미루고 미루다 푼 미로탐색인데 전보다는 확실히 bfs의 진행과정을 알 수 있었고 그 과정을 생각하며 코드로 짤 수 있었다. 비슷한 문제를 풀면 bfs도 정복할 수 있을 것 같다!
'스터디 1일 1커밋' 카테고리의 다른 글
| 240225 [BOJ/백준] 24482. 알고리즘 수업- 깊이 우선 탐색 4 (1) | 2024.02.25 |
|---|---|
| 240225 [swea] 1234. 비밀번호 (1) | 2024.02.25 |
| 240222 [swea] 11315. 오목판정 (0) | 2024.02.23 |
| 240222 [swea] 19185. 육십갑자 (0) | 2024.02.23 |
| 240221 [BOJ/백준] 2309. 일곱 난쟁이 (0) | 2024.02.21 |