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
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 11721 열 개씩 끊어 출력하기 (0) | 2023.02.05 |
---|---|
[python] 백준 2250 트리의 높이와 너비 (1) | 2023.02.01 |
[python] 백준 14226 이모티콘 (0) | 2023.01.28 |
[python] 백준 2146 다리 만들기 (0) | 2023.01.27 |
[python] 백준 16964 DFS 스페셜 저지 (0) | 2023.01.27 |
댓글