티스토리 뷰

코딩테스트

미로 탈출

ajaa 2024. 10. 14. 18:42

📌문제

예제 5-11 미로 탈출

동빈이는 N x M 크기의 직사각형 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다.

동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한번에 한칸씩 이동할 수 있다.

괴물이 있는 부분은 0, 괴물이 없는 부분은 1이다.

이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오.

 

📌풀이

(1, 1) 지점에서부터 BFS 수행

시작 지점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색

 

📌코드

from collections import deque

n, m = map(int, input().split())
# 2차원 리스트의 맵 정보 입력받기
graph = []
for i in range(n):
    graph.append(list(map(int, input())))

# 이동할 네 방향 정의(상,하,좌,우)
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]


def bfs(x, y):
    # 큐 구현을 위해 deque 라이브러리 사용
    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))

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

'코딩테스트' 카테고리의 다른 글

삽입 정렬  (5) 2024.10.16
정렬, 선택 정렬  (1) 2024.10.15
음료수 얼려 먹기  (5) 2024.10.13
탐색 알고리즘 BFS  (4) 2024.10.12
탐색 알고리즘 DFS  (8) 2024.10.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
29 30 31
글 보관함