'낮은 번호의 바이러스부터 증식한다' 는 것에서 sort메소드를 생각해내는 것이 핵심이다. 같은 시간, 같은 위치에 서로 다른 바이러스가 당도한다고 쳐도, 작은 순으로 정렬된 바이러스를 queue에 넣으면 자연스럽게 번호가 작은 바이러스가 먼저 공간을 차지하는 것을 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
from collections import deque
n,k=map(int,input().split()) #col수, 바이러스 종류
maps=[]
data=[]#바이러스에 대한 정보(종류,시간,x,y좌표)
for i in range(n):
maps.append(list(map(int,(input().split()))))
for j in range(n):#해당 위치에 바이러스가 존재하는 경우
if(maps[i][j]!=0):
data.append((maps[i][j],0,i,j)) #초기 바이러스 정보 입력
data.sort() #낮은 번호의 바이러스부터 증식하므로 정렬!!
que=deque(data) #정렬 덕분에 숫자가 작은 바이러스가 자리를 선점할 수 있다.
s,ex,ey=map(int,input().split()) #s초뒤,(ex,ey)에 존재하는 바이러스 종류를 출력해야함
dx=[-1,1,0,0] #상하좌우
dy=[0,0,-1,1]
while que: #큐가 빌 때까지 반복(bfs)
virus,time,x,y=que.popleft() #현재 상태
if time==s:
break
for i in range(4): #상하좌우 위치 확인
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<=n-1 and 0<=ny<=n-1: #해당 위치로 이동할 수 있는 경우
if maps[nx][ny]==0: #비어 있는 경우 이동
maps[nx][ny]=virus
que.append((virus,time+1,nx,ny))
print(maps[ex-1][ey-1]) #[1,1] 부터 시작하는 것으로 간주하므로 한 칸씩 당겨와야 한다
|
cs |
'Algorithm > Python' 카테고리의 다른 글
[백준/Python] 2110번 : 공유기 설치 (0) | 2021.04.03 |
---|---|
[프로그래머스/python] 실패율 (2019 KAKAO BLIND RECRUITMENT) (0) | 2021.03.27 |
[백준/Python] 14502번 : 연구소 (0) | 2021.03.20 |
[백준/Python] 14888번 : 연산자 끼워넣기 (0) | 2021.03.15 |
[백준/Python] 15686번 : 치킨 배달 (0) | 2021.03.10 |