https://www.acmicpc.net/problem/18405
<aside> 📌 S초 뒤에 (X,Y)에 존재하는 바이러스의 종류를 출력한다. 만약 S초 뒤에 해당 위치에 바이러스가 존재하지 않는다면, 0을 출력한다.
</aside>
자신의 주변을 0이면 퍼트리고 0이 아니면 퍼뜨리지 않음
import sys
from collections import deque
input = sys.stdin.readline
def get_result(goal_sec, goal_x, goal_y):
# 바이러스 배열
virus = [[0 for _ in range(n)] for _ in range(n)]
target = []
time = 0
# 바이러스 위치 찾기
for i in range(n):
for j in range(n):
if grid[i][j] != 0:
target.append((i, j))
virus[i][j] = grid[i][j]
queue = deque(target)
directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 방향 리스트
while queue and time < goal_sec * n:
x, y = queue.popleft()
for dx, dy in directions:
nx, ny = x + dx, y + dy # 현재 지점에서 상하좌우 인접한 지점
# 인접한 지점이 맵 안에 있고, 아직 바이러스가 있지 않은 부분이고(0), 아직 방문하지 않은 지점이라면,
if (0 <= nx < n and 0 <= ny < n) and grid[nx][ny] == 0:
if virus[nx][ny] == 0 or virus[nx][ny] > virus[x][y]:
virus[nx][ny] = virus[x][y]
queue.append((nx, ny))
time += 1
return virus[goal_x][goal_y]
# 초기화
n, k = map(int, input().split())
grid = []
for _ in range(n):
li = list(map(int, input().split()))
grid.append(li)
s, x, y = map(int, input().split())
# 함수 호출
result = get_result(s, x-1, y-1)
print(result)

바이러스가 낮은 순서로 보내지지 않는 것 같아 이 부분을 큐에 함께 저장해야 했는데 이 부분을 간과했다… 하지만 더이상 아이디어가 떠오르지 않아 답을 보고 다시 코드를 수정하였다.