💡문제접근
- 번호가 낮은 종류의 바이러스부터 어떻게 증식시켜야할지 고민했다.
queue
에서 popleft
를 하게 된다면 가장 맨 앞에 있는 원소부터 빼내는 방법을 취하게 되는데 이 때 가장 작은 번호가 앞에 있다면 낮은 종류의 바이러스부터 증식이 가능하게 된다.
💡코드(메모리 : 34192KB, 시간 : 184ms)
from collections import deque
import sys
input = sys.stdin.readline
virus_data = []
N, K = map(int, input().strip().split())
examiner = [list(map(int, input().strip().split())) for _ in range(N)]
for i in range(N):
for j in range(N):
if examiner[i][j] != 0:
virus_data.append([examiner[i][j], i, j, 0])
S, X, Y = map(int, input().strip().split())
virus_data.sort()
queue = deque(virus_data)
while queue:
virus, x, y, time = queue.popleft()
if time == S:
break
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
if 0 <= nx < N and 0 <= ny < N:
if examiner[nx][ny] == 0:
examiner[nx][ny] = virus
queue.append([virus, nx, ny, time + 1])
if examiner[X-1][Y-1] == 0:
print(0)
else:
print(examiner[X-1][Y-1])
💡소요시간 : 37m