algorithm/baekjoon

[백준] 알고스팟(python)

support_u 2023. 4. 28. 02:00

문제

 

1261번: 알고스팟

첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미

www.acmicpc.net

코드

import sys, heapq
input = sys.stdin.readline
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def go(i, j):
    visited[i][j] = 0
    queue = []
    # 힙을 사용하여 최대한 적은 벽으로 움직이는것 먼져 나오게 한다
    # 시작점을 넣어준다
    heapq.heappush(queue, [int(miro[i][j]), i, j])

    # queue가 필때까지
    while queue:
        wall, x, y = heapq.heappop(queue)
        # 원하는 위치에 오면 멈춰라
        if x == X - 1 and y == Y - 1:
            print(wall)
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            # 범위 안에서 visited에 등록 된것 보다 적에 움직인 것만 넣어줘라
            if 0 <= nx < X and 0 <= ny < Y and visited[nx][ny] > wall + int(miro[nx][ny]):
                visited[nx][ny] = wall + int(miro[nx][ny])
                heapq.heappush(queue, [visited[nx][ny], nx, ny])


Y, X = map(int, input().split())

miro = [list(input()) for _ in range(X)]
visited = [[int(10e9)] * Y for _ in range(X)]

go(0, 0)