RUBY

[백준] 경쟁적 전염 본문

PS/BOJ

[백준] 경쟁적 전염

RUBY_루비 2020. 10. 14. 23:59

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

분류::  bfs

 

1. 문제 이해 및 해결과정

- 바이러스가 낮은 번호부터 증식한다 ->큐에 낮은 바이러스 번호부터 넣어야한다. 

 

2. 풀이방법

  1. [ python ] bfs

#경쟁적 전염
#https://www.acmicpc.net/problem/18405
import sys
from collections import deque
sys.stdin = open("input.txt","r")
input=sys.stdin.readline
n,k=map(int,input().split())
board=[list(map(int,input().split())) for i in range(n)]
virus=[] #바이러스에 대한 정보
dh=[-1,1,0,0]
dw=[0,0,-1,1]
s,x,y =map(int,input().split()) #제한시간, 좌표

def bfs():
    while q:
        v,t,curh,curw=q.popleft() #바이러스번호,시간,위치
        if s==t: #주어진 시간이되면
            break
        for i in range(4):
            nh=curh+dh[i]
            nw=curw+dw[i]
            if 0<=nh<n and 0<=nw<n and board[nh][nw]==0: #아직 방문안했으면
                board[nh][nw]=v
                q.append((v,t+1,nh,nw)) #바이러스번호, 시간 +1, 좌표


#출발좌표 큐에 다 넣고 시작
for i in range(n):
    for j in range(n):
        if board[i][j]>0: #바이러스가 있으면
            virus.append((board[i][j],0,i,j))

virus.sort() #바이러스가 낮은 번호부터 증식하므로
# print(virus)
q=deque(virus)
bfs()

# for i in range(n):
#     print(board[i])

print(board[x-1][y-1])

 

3. 오답원인

 

4. 알게된 점

 - bfs중에 큐에 넣기전에 sort하는 과정이 특이했다. 

'PS > BOJ' 카테고리의 다른 글

[백준] 단어 공부  (0) 2024.02.14
[백준] 대소문자 바꾸기  (0) 2024.02.13
[백준] 요세푸스 문제 0  (0) 2020.10.13
[백준] 카드2  (0) 2020.10.12
[백준] 트리  (0) 2020.10.10
Comments