Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이진탐색 #나무 자르기
- 영어말하기
- 오픽노잼
- topdown
- dynamicProgramming
- English
- 오픽가격
- fibo
- XML
- 영어회화
- 탑다운
- 주석
- 다이나믹프로그래밍
- stack 스택
- 오픽노잼공부방법
- ㅂ
- 안드로이드주석
- 안드로이드
- 바텀업
- 메모이제이션
- 오픽공부법
- XML주석
- opic
- 피보나치수열
- dp
- 오픽
- 이진탐색
- 디피
- 오픽점수잘받는방법
Archives
RUBY
[백준] 경쟁적 전염 본문
출처:: 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