https://www.acmicpc.net/problem/2665
뭘 어떻게 해야하나 막막했지만 어쨌든 도착한 위치의 좌표에 제일 적게 벽을 부순 채로 도달한 상황의 내용을 출력하면 된다.
그러면 어떻게 해야할지 감이 좀 잡힌다.
모든 칸에 대해서 순회를 시도하겠지만 그래도 이미 지나온 칸 중에선 상식적인 선에서의 재 순회를 하게끔 하여 해결을 보려고 했다.
메모리 초과 이슈로 파일럿 코의 도움을 마지막으로 받았는데 아이디어의 결이 같았다는 점에서 다소 찜찜한 해결이 되었다.
import sys
from collections import deque
input = sys.stdin.readline
roomStatus = []
roomSize = int(input().strip())
visitCnt = [[float('inf') for _ in range(roomSize)] for _ in range(roomSize)]
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
for i in range(roomSize):
line = input().strip()
roomStatus.append([int(room) for room in line])
queue = deque()
queue.append([0, 0, 0])
while queue:
item = queue.popleft()
for i in range(4):
tmpX = item[0] + dx[i]
tmpY = item[1] + dy[i]
tmpVC = item[2]
isWall = False
if(tmpX < 0 or tmpX >= roomSize or tmpY < 0 or tmpY >= roomSize):
continue
new_broken_walls = tmpVC + (1 if roomStatus[tmpX][tmpY] == 0 else 0)
if new_broken_walls < visitCnt[tmpX][tmpY]:
visitCnt[tmpX][tmpY] = new_broken_walls
queue.append((tmpX, tmpY, new_broken_walls))
print(visitCnt[roomSize - 1][roomSize - 1])
'문제풀이' 카테고리의 다른 글
[PY] 1904 : 01타일 (0) | 2025.04.05 |
---|---|
[PY] 2252 : 줄 세우기 (0) | 2025.04.03 |
[PY] 3055 : 탈출 (0) | 2025.04.02 |
[PY] <!> 1432 : 그래프 수정 (0) | 2025.04.02 |
[PY] 2294 : 동전 2 (1) | 2025.04.01 |