📖Problem

https://www.acmicpc.net/problem/18405

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

</aside>

🔍Intuition

자신의 주변을 0이면 퍼트리고 0이 아니면 퍼뜨리지 않음

  1. 바이러스의 위치 파악
  2. 바이러스 맵에서 벗어나지 않고, 상하좌우에 있고, 아직 방문하지 않은 노드이면, 현재 노드의 값 복사

🔍Approach

🚩My submission

결과 → 실패

import sys
from collections import deque
input = sys.stdin.readline

def get_result(goal_sec, goal_x, goal_y):
    # 바이러스 배열
    virus = [[0 for _ in range(n)] for _ in range(n)]
    target = []
    time = 0
    # 바이러스 위치 찾기
    for i in range(n):
        for j in range(n):
            if grid[i][j] != 0:
                target.append((i, j))
                virus[i][j] = grid[i][j]

    queue = deque(target)
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 방향 리스트

    while queue and time < goal_sec * n:

        x, y = queue.popleft()

        for dx, dy in directions:
            nx, ny = x + dx, y + dy # 현재 지점에서 상하좌우 인접한 지점
            # 인접한 지점이 맵 안에 있고, 아직 바이러스가 있지 않은 부분이고(0), 아직 방문하지 않은 지점이라면,
            if (0 <= nx < n and 0 <= ny < n) and grid[nx][ny] == 0:
                if virus[nx][ny] == 0 or virus[nx][ny] > virus[x][y]:
                    virus[nx][ny] = virus[x][y]
                queue.append((nx, ny))
        time += 1

    return virus[goal_x][goal_y]

# 초기화
n, k = map(int, input().split())
grid = []
for _ in range(n):
    li = list(map(int, input().split()))
    grid.append(li)
s, x, y = map(int, input().split())

# 함수 호출
result = get_result(s, x-1, y-1)
print(result)

스크린샷 2024-07-29 오후 6.47.16.png

바이러스가 낮은 순서로 보내지지 않는 것 같아 이 부분을 큐에 함께 저장해야 했는데 이 부분을 간과했다… 하지만 더이상 아이디어가 떠오르지 않아 답을 보고 다시 코드를 수정하였다.

도움을 받아 최종 제출 → 성공