[파이썬] 백준 2665 : 미로만들기 (골드4)
2665번: 미로만들기
첫 줄에는 한 줄에 들어가는 방의 수 n(1 ≤ n ≤ 50)이 주어지고, 다음 n개의 줄의 각 줄마다 0과 1이 이루어진 길이가 n인 수열이 주어진다. 0은 검은 방, 1은 흰 방을 나타낸다.
www.acmicpc.net
문제
풀이
방향성 생각
- 0이면 부수면서 부순 횟수 카운트, 1이면 그냥 이동
- 힙에다가 부순횟수 저장해서 push, pop
전체코드
import heapq as hq
import sys
input = lambda : sys.stdin.readline().rstrip()
n = int(input())
arr = [list(input()) for _ in range(n)]
dire = [(1,0),(0,1),(-1,0),(0,-1)]
visit = [[50**2]*n for _ in range(n)]
visit[0][0] = 0
heap = [(0,0,0)]
while heap:
c,x,y = hq.heappop(heap)
if (x,y) == (n-1,n-1):
print(c)
for dx,dy in dire:
nx,ny = x+dx,y+dy
if 0<=nx<n and 0<=ny<n:
if arr[ny][nx] == '1' and c < visit[ny][nx]:
visit[ny][nx] = c
hq.heappush(heap,(c,nx,ny))
elif arr[ny][nx] == '0' and c+1 < visit[ny][nx]:
visit[ny][nx] = c+1
hq.heappush(heap,(c+1,nx,ny))
코멘트
벽부수고 이동하기?
'Algorithm > Graph' 카테고리의 다른 글
[파이썬] 백준 1414 : 불우이웃돕기 (골드3) (0) | 2023.12.13 |
---|---|
[파이썬] 백준 1774 : 우주신과의 교감 (골드3) (0) | 2023.12.13 |
[파이썬] 백준 22944 : 죽음의 비 (골드3) (0) | 2023.12.12 |
[파이썬] 백준 17471 : 게리맨더링 (골드4) (0) | 2023.12.06 |
[파이썬] 프로그래머스 : 지형이동 (Lv.4) (0) | 2023.12.06 |
[파이썬] 백준 1486 : 등산 (골드2) (0) | 2023.12.04 |
[파이썬] 백준 17352 : 여러분의 다리가 되어 드리겠습니다! (골드5) (0) | 2023.12.03 |
댓글