반응형
250x250
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 |
Tags
- 토마토
- 프로그래머스
- 백준 N-Queens
- dfs
- 그리디
- BFS
- 프로그래머스 파이썬
- 코드
- 백준 백트랙킹 파이썬
- BOJ
- 백준 토마토 파이썬
- it
- 자료구조
- 정보처리기사 실기
- 정보처리기사
- 정보처리기사 실기 시험
- 파이썬
- 자바
- 코딩테스트
- 코딩
- 백준 그래프 탐색 파이썬
- 백준
- 2022년 정보처리기사 실기
- 2022년 정보처리기사 실기 가답안
- 알고리즘
- 프로그래밍
- 2022년 정보처리기사 실기 1회 가답안
- python
- 백준 백트랙킹
- 백준 그래프 이론 파이썬
Archives
- Today
- Total
코딩,안되면 될때까지
[백준 18405번 -경쟁적 전염]-파이썬 본문
728x90
반응형
백준 18405번 파이썬 풀이
<문제>
https://www.acmicpc.net/problem/18405
<풀이>
바이러스의 정보를 담을 리스트(data)에 바이러스의 종류,위치,시간을 입력한다.
바이러스는 항상 낮은번호부터 확산한다 했으므로 data를 오름차순 정렬한다.
data를 큐에 넣은후 BFS알고리즘을 적용한다.
-BFS알고리즘 설명-
1. 시간(s)가 목표한 시간(target_s)에 도달하면 while문을 멈춘다.
2. 큐에서 원소를 꺼낸후 네 방향중 바이러스가 이동 가능한위치로 바이러스를 확산시킨다.
3. 바이러스를 확산시킨후 1초지난시간을 반영(s+1)하여 (바이러스의 번호,시간,위치)를 큐에 삽입한다.
4.위 2~3번과정을 1번을 만족하거나 큐가 빌때까지 반복한다.
<코드>-파이썬
import sys
from collections import deque
n,k = map(int,sys.stdin.readline().split())
graph = []
data = []
for _ in range(n):
graph.append(list(map(int,sys.stdin.readline().split())))
for i in range(n):
for j in range(n):
if graph[i][j]!=0:
data.append((graph[i][j],0,i,j))
data.sort()
q = deque(data)
target_s,target_x,target_y = map(int,sys.stdin.readline().split())
dx = [-1,0,1,0]
dy = [0,-1,0,1]
while q:
virus,s,x,y = q.popleft()
if s == target_s:
break
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx>=0 and nx<n and ny>=0 and ny<n:
if graph[nx][ny] == 0:
graph[nx][ny] = virus
q.append((virus,s+1,nx,ny))
print(graph[target_x-1][target_y-1])
728x90
반응형
'백준 > 백준-파이썬' 카테고리의 다른 글
[백준 1012번-유기농 배추]-파이썬 (30) | 2022.03.11 |
---|---|
[백준 2606번-바이러스]-파이썬 (24) | 2022.03.10 |
[백준-14502번-연구소] - 파이썬 (4) | 2022.03.08 |
[백준]2667-단지번호붙이기 (8) | 2022.03.06 |
[백준]18352- 특정거리의 도시 찾기 (6) | 2022.03.05 |
Comments