[알고리즘/백준] 18405번 : 경쟁적 전염(python)

유현민·2022년 3월 29일
0

알고리즘

목록 보기
81/253


queue에 바이러스 정보를 다 줘야한다. 그러면서 0이 나오면 주변에 있는거로 바꾸고 다시 추가

from collections import deque


def solution():
    q = deque(virus)
    while q:
        vir, x, y, time = q.popleft()
        if time == S:
            break
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y
            if 0 <= nx < N and 0 <= ny < N:
                if a[nx][ny] == 0:
                    a[nx][ny] = vir
                    q.append((vir, nx, ny, time + 1))
    return


if __name__ == "__main__":
    N, K = map(int, input().split())
    a = [list(map(int, input().split())) for _ in range(N)]
    S, X, Y = map(int, input().split())
    virus = []
    for x in range(N):
        for y in range(N):
            if a[x][y] != 0:
                virus.append((a[x][y], x, y, 0))
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    virus.sort()
    solution()
    print(a[X - 1][Y - 1])
profile
smilegate megaport infra

0개의 댓글