본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 1261 알고스팟

by Alan_Kim 2023. 1. 29.
728x90
반응형

https://www.acmicpc.net/problem/1261

 

1261번: 알고스팟

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

www.acmicpc.net

 

문제해결

  • 다익스트라 (bfs를 이용해 꼭지점간의 최소 거리 측정)
  • 벽이 없는 곳은 벽을 깨지 않으므로 비용(cost)가 이전이랑 같다. 따라서 deque()의 왼쪽에 다시 넣는다.
  • 벽을 부시면 비용(cost)를 추가 지불 해야하므로 deque()오른쪽에 넣는다.
  • deque가 없어질 때 까지 반복한 후 m,n 까지 가는데 비용을 출력한다.

CODE

import sys
from collections import deque
m, n = map(int, input().split())
board = [list(map(int, input())) for _ in range(n)]
move = [(-1,0), (1,0), (0,1), (0,-1)]
dist =[[-1 for _ in range(m)] for _ in range(n)]

q = deque()
q.append((0,0))
dist[0][0] = 0
while q:
    x, y = q.popleft()
    for k in range(4):
        nx = x + move[k][0]
        ny = y + move[k][1]
        if 0 <= nx <n and 0<=ny<m:
            if dist[nx][ny] == -1:
                if board[nx][ny] ==0:
                    dist[nx][ny] = dist[x][y]
                    q.appendleft((nx,ny))
                else:
                    dist[nx][ny] = dist[x][y] + 1
                    q.append((nx,ny))
print(dist[n-1][m-1])

 

728x90
반응형

댓글