💻 입력 조건

  • 첫째 줄에 자연수 N,K가 주어지며, 각 자연수는 공백으로 구분합니다. (1 <= N <= 200, 1 <= K <= 1,000)
  • 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어집니다. 각 행은 N개의 원소로 구성되며 해당 위치에 존재하는 바이러스의 번호가 주어지며 공백으로 구분합니다. 단, 해당 위치에 바이러스가 존재하지 않는 경우 0이 주어집니다. 또한 모든 바이러스의 번호는 K 이하의 자연수로만 주어집니다.
  • N + 2번째 줄에는 S, X, Y가 주어지며 공백으로 구분합니다. (0 <= S <= 10,000,1 <= X, Y <= N)

💻 출력 조건

  • S초 뒤에 (X, Y)에 존재하는 바이러스의 종류를 출력합니다. 만약 S초 뒤에 해당 위치에 바이러스가 존재하지 않는다면 0을 출력합니다.

💻 입력 예시1

3 3
1 0 2
0 0 0
3 0 0 
2 3 2 

💻 출력 예시1

3

💻 입력 예시2

3 3
1 0 2
0 0 0
3 0 0 
1 2 2

💻 출력

0

📖 문제 해결
주어진 시간 동안 바이러스를 순서대로 증식시킨 후 찾고자 하는 좌표의 바이러스 종류를 출력시키는 코드를 작성하였습니다. 이때, '바이러스를 순서대로 증식시키는 코드'는 bfs를 이용하여 작성하였습니다. 구체적으로 설명하자면 다음과 같습니다. 맨 처음에 주어진 바이러스의 좌표 정보를 queue에 차례대로 (virus,r_idx,c_idx)의 형태로 넣은 후 popleft() 함수를 이용하여 차례대로 뽑으며 해당 바이러스의 상하좌우로 바이러스를 증식시킵니다. 바이러스를 증식시킬 때마다 증식시킨 바이러스와 그 위치를 다시 queue에 추가해 줍니다. 이때, 이전에 증식시킨 바이러스가 k이며 이번에 증식시키고자 하는 바이러스가 1인 경우 sec(시간 정보를 담아두는 변수)에 1을 더해주고, 이 secs와 같아지면 증식을 멈춥니다. 증식을 멈춘 test_tube에서 x-1, y-1에 위치한 바이러스 정보를 출력하면 문제에서 제시한 좌표에 있는 바이러스 종류를 알 수 있습니다.

# n, k 입력 받기
n,k = list(map(int,input().split()))

# test_tube 정보 입력 받기
test_tube = []
for i in range(n):
    test_tube.append(list(map(int,input().split())))

s, x, y = list(map(int,input().split()))

from collections import deque

queue = deque()

# 바이러스의 위치 정보를 순서대로 queue에 넣기
for virus in range(1,k+1):
    for r_idx, row in enumerate(test_tube):
        for c_idx, col in enumerate(row):
            if test_tube[r_idx][c_idx] == virus:
                queue.append((virus,r_idx,c_idx))

dx = [+1, -1, 0, 0]
dy = [0, 0, +1, -1]

prev = 0
sec = 0

# 주어진 시간 동안 바이러스 순서대로 증식시키기
while True:
    
    virus_inform = queue.popleft()
    
    if prev == 3 and virus_inform[0] ==1 :
        sec += 1
    
    if sec == s:
        break
    
    for i in range(4):
        minimum_ = 0 <= virus_inform[1]+dx[i] and 0 <= virus_inform[2]+dy[i]
        maximum_ = virus_inform[1]+dx[i] <= n-1 and virus_inform[2]+dy[i] <= n-1
        if minimum_ and maximum_ and test_tube[virus_inform[1]+dx[i]][virus_inform[2]+dy[i]] == 0:
            test_tube[virus_inform[1]+dx[i]][virus_inform[2]+dy[i]] = virus_inform[0]
            queue.append((virus_inform[0],virus_inform[1]+dx[i],virus_inform[2]+dy[i]))

    prev = virus_inform[0]

print(test_tube[x-1][y-1])
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글