반응형
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 | 29 | 30 |
Tags
- 너비우선탐색
- 사회조사분석사 2급 접수
- 사회조사분석사 2급 공부방법
- 그리디
- 파이썬 정렬
- 백준 알고리즘
- 사회조사분석사 2급 필기 요약정리
- 시물레이션
- 사회조사분석사 2급 독학
- 사회조사분석사 2급 필기 공부방법
- 오미크론 자가격리
- 사회조사분석사 2급
- 공모주 청약
- 사회조사분석사2급실기신청
- 현대엔지니어링
- 정렬
- BFS
- 머신러닝
- 백준
- 공모주청약
- 사회조사분석사 2급 기출문제집
- 공모주
- 현대엔지니어링 수요예측
- 사회조사분석사 2급 필기 시험시간
- 알고리즘
- 사이킷런
- 벽부수고이동하기 파이썬
- DFS
- 2월공모주
- 사회조사분석사2급실기신청꿀팁
Archives
- Today
- Total
세상을 바꾸는 데이터
[백준 18405번] 경쟁적 전염 - 파이썬 본문
문제 링크:
https://www.acmicpc.net/problem/18405
풀이 유형:
구현, 그래프 이론, 그래프 탐색, 너비 우선 탐색
풀이 과정:
이 문제는 너비 우선 탐색(BFS)을 이용하여 해결할 수 있다.
이 문제의 포인트는 바이러스가 낮은 번호부터 증식한다는 점이다. 이는 정렬을 이용하자.
낮은 번호부터 증식하므로, 초기에 큐에 원소를 삽입할 때는 낮은 바이러스의 번호부터 삽입한다.
이후에 BFS를 수행하여 방문하지 않는 위치를 차례대로 방문해주면 된다.
풀이 코드:
# 18405번 경쟁적 전염
from collections import deque
# 시험관의 크기와 바이러스 개수를 입력받기
n, k = map(int, input().split())
graph = [] # 전체 보드 정보를 담는 리스트
data = [] # 바이러스 정보를 담는 리스트
# 바이러스의 위치 정보 입력받기
for i in range(n):
graph.append(list(map(int, input().split())))
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, input().split())
# 시간 변수
s = 0
# 북, 동, 남, 서 이동방향
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 큐가 비거나 시간이 다 되었을 때 반복문 종료
while q:
# 바이러스 종류, 현재시간, 바이러스 위치 꺼내오기
virus, cnt, x, y = q.popleft()
if cnt == target_s:
break
# 모든 이동방향을 확인하며
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 다음 방향으로 이동이 가능하다면
if 0 <= nx < n and 0 <= ny < n:
# 바이러스가 존재하지 않다면
if graph[nx][ny] == 0:
# 바이러스 전파
graph[nx][ny] = virus
# 바이러스 데이터 큐에 삽입
q.append((virus, cnt+1, nx, ny))
# 정답 출력
print(graph[target_x - 1][target_y - 1])
728x90
반응형
'PS Study > BOJ(백준)' 카테고리의 다른 글
[백준 2529번] 부등호 - 파이썬 (28) | 2022.02.21 |
---|---|
[백준 14888번] 연산자 끼워넣기 - 파이썬 (49) | 2022.02.15 |
[백준 14502번] 연구소 - 파이썬 (36) | 2022.02.14 |
[백준 18352번] 특정 거리의 도시 찾기 - 파이썬 (33) | 2022.02.14 |
[백준 3190번] 뱀 - 파이썬 (37) | 2022.02.12 |
Comments