영호
[백준] 경쟁적 전염 18405 (Python) 본문
문제 링크
https://www.acmicpc.net/problem/18405
나의 풀이
- 입력을 받으면서 초반 virus들의 정보를 [virus_num, 0(time), x, y] 별도의 list에 저장한다.
- virus_num이 낮은 것들부터 전염이 되기 때문에 위 list를 정렬한다.
- virus정보들을 담은 list를 q로 만든다.
- time이 끝날 때까지 bfs알고리즘을 수행한다.
Code
# https://www.acmicpc.net/problem/18405
from collections import deque
n, k = map(int,input().split())
graph = []
virus_info = []
for i in range(n):
graph.append(list(map(int,input().split())))
for j in range(n):
if graph[i][j] != 0:
virus_info.append((graph[i][j], 0, i, j))
s, end_x, end_y = map(int,input().split())
virus_info.sort()
q = deque(virus_info)
dx = [-1,1,0,0]
dy = [0,0,-1,1]
while q:
virus_num, time, x, y = q.popleft()
if time == s:
break
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and ny >= 0 and ny < n and graph[nx][ny] == 0:
graph[nx][ny] = virus_num
q.append((virus_num, time + 1, nx, ny))
print(graph[end_x-1][end_y-1])
Git
https://github.com/youngh0/Algorithm/blob/master/DFS%2CBFS/boj_18405.py
'Algorithm > BFS' 카테고리의 다른 글
[백준] 불 5427 (Java) (0) | 2022.10.12 |
---|---|
[백준] 1697 숨바꼭질 (Python) (0) | 2022.06.28 |
[백준] 토마토 7576 (Python) (0) | 2022.05.26 |
[백준] 연구소 14502 (Python) (0) | 2022.05.12 |
Comments