이번 문제는 각 숫자의 위치를 deque로 저장한 리스트로 관리하고, BFS를 통해 주변을 탐색하며 0인 경우에 자신으로 숫자를 바꿔주는 방식을 사용하였다. 이때 각 숫자의 모든 위치를 계속해서 deque에 담으면 탐색의 크기가 커지기 때문에 새로 값을 입력한 값들만 deque에 담기도록 코드를 작성하였다. 한번 퍼트린 자리에서는 더 이상 퍼트릴 자리가 없는 것을 이용하였다.
import collections
n, k=map(int, input().split())
grid=[list(map(int, input().split())) for _ in range(n)]
s, y, x=map(int, input().split())
y, x=y-1, x-1
viruses=[collections.deque() for _ in range(k+1)]
for i in range(n):
for j in range(n):
if grid[i][j]!=0:
viruses[grid[i][j]].append((i, j))
def bfs():
dy, dx=[0, 1, 0, -1], [1, 0, -1, 0]
for i in range(1, k+1):
new_q=collections.deque()
while viruses[i]:
y, x=viruses[i].popleft()
for j in range(4):
ny, nx=y+dy[j], x+dx[j]
if 0<=ny<n and 0<=nx<n and grid[ny][nx]==0:
grid[ny][nx]=grid[y][x]
new_q.append((ny, nx))
viruses[i]=new_q
for i in range(s):
bfs()
print(grid[y][x])