https://www.acmicpc.net/problem/18405
시간 1초, 메모리 256MB
input :
output :
조건 :
모든 바이러스는 1초마다 상, 하, 좌, 우의 방향으로 증식
단, 매 초마다 번호가 낮은 종류의 바이러스부터 먼저 증식한다.
증식 과정에서 특정한 칸에 이미 어떠한 바이러스가 존재한다면, 그 곳에는 다른 바이러스가 들어갈 수 없다.
바이러스의 번호에 따라 우선순위가 존재하는 거고, 날짜에 따라 어디까지 증식을 할지를 정해야 한다.
맨 처음 입력을 받을 때에 각 바이러스의 위치를 저장하도록 하고 이 배열을 정렬하여 우선순위를 맞춰준다.
BFS의 방식을 사용하면 어차피 큐에 순서대로 우선순위를 유지한채로 저장이 될 것이다.
날짜를 구분하려면 각 날짜에 해당하는 큐의 길이를 가지고 BFS를 수행하도록 하자.
이를 통해 날짜를 구분할 수 있을 것이다.
import sys
from collections import deque
n, k = map(int, sys.stdin.readline().split())
data, pos = [], []
dx, dy = [0, 0, 1, -1], [1, -1, 0, 0]
for i in range(n):
temp = list(map(int, sys.stdin.readline().split()))
data.append(temp)
for j in range(n):
if temp[j] != 0:
pos.append((temp[j], i, j))
s, x, y = map(int, sys.stdin.readline().split())
pos.sort()
q = deque(pos)
for i in range(s):
for j in range(len(q)):
value, now_x, now_y = q.popleft()
for k in range(4):
nx = now_x + dx[k]
ny = now_y + dy[k]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if data[nx][ny] == 0:
data[nx][ny] = data[now_x][now_y]
q.append((data[now_x][now_y], nx, ny))
print(data[x - 1][y - 1])