[백준] 18405 : 경쟁적 전염

이상훈·2023년 8월 7일
0

알고리즘

목록 보기
10/57
post-thumbnail

경쟁적 전염

풀이

 이 문제는 BFS를 이용해서 해결할 수 있다. 주의할 점은 각 바이러스가 낮은 번호부터 증식한다는 점이다. 낮은 번호부터 증식하므로 초기에 큐에 원소를 삽입할 때 낮은 바이러스의 번호부터 삽입해야 한다. 그래야 자연스럽게 오름차순으로 바이러스가 전염된다.

from collections import deque
N, K = map(int, input().split())
graph = []
for i in range(N):
    graph.append(list(map(int, input().split())))
S, X, Y = map(int, input().split())

# 초기 큐 설정
data = []
for i in range(N):
    for j in range(N):
        if graph[i][j] != 0:
            data.append((graph[i][j], i, j))
data.sort()
queue = deque(data)

# 동, 서, 남, 북
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

def bfs(queue):
    v, x, y = queue.popleft()
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if 0<=nx<N and 0<=ny<N and graph[nx][ny] == 0:
            graph[nx][ny] = v
            queue.append((v, nx, ny))

for i in range(S):
    for j in range(len(queue)):
        bfs(queue)

print(graph[X-1][Y-1])

시간 복잡도 : O(SN^2)

profile
Problem Solving과 기술적 의사결정을 중요시합니다.

0개의 댓글