BOJ - 2178

주의·2023년 11월 30일
0

boj

목록 보기
21/214

백준 문제 링크
미로 탐색

❓접근법

  1. BFS 방식을 사용했다
  2. 좌표와 distance를 popleft 하면서, 이동할 수 있는 방향이라면
    방금 전 좌표가 가진 distance에 +1을 한 값을 distance로 저장한다.
  3. (1,1)에서 출발해 (N-1,M-1)에 도착하면 distance를 반환한다.

👌🏻코드

N,M = map(int, input().split())
lst = [[0] * M for _ in range(N)]
for i in range(N):
    x = input()
    for j in range(len(x)):
        lst[i][j] = int(x[j])

from collections import deque
start_x, start_y = 0,0
end_x, end_y = N-1, M-1

dx = [0,0,1,-1]
dy = [1,-1,0,0]

queue = deque()
queue.append((start_x, start_y,1))

visited = set()
visited.add((start_x, start_y))

while queue:
    x,y,distance = queue.popleft()
    
    if (x,y) == (end_x, end_y):
        answer = distance
        break
        
    for d in range(4):
        nx = x + dx[d]
        ny = y + dy[d]
        
        if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] == 1) and ((nx,ny) not in visited):
            queue.append((nx,ny,distance + 1))
            visited.add((nx,ny))
            
print(answer)

프로그래머스에서 똑같은 문제를 풀어봐서 좀 수월했다.

0개의 댓글