[백준 18405] 경쟁적 전염

2021. 5. 12. 22:33·알고리즘 문제풀이

www.acmicpc.net/problem/18405

 

18405번: 경쟁적 전염

첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치

www.acmicpc.net

from collections import deque

N,K = map(int,input().split())
mat = [list(map(int,input().split())) for i in range(N)]
S,X,Y = map(int,input().split())
dx=[0,0,1,-1]
dy=[1,-1,0,0]
start = [] # 바이러스 종류, x,y좌표

for i in range(N):
    for j in range(N):
        if mat[i][j] != 0:
            start.append([mat[i][j],i,j])

start.sort()

visited = [[0 for i in range(N)] for j in range(N)]
for i in start:
    kind,tx,ty = i
    visited[tx][ty] = kind
q = deque(start)

cnt=0
while q:
    q_size = len(q)
    cnt+=1
    if cnt == S+1:
        break
    for _ in range(q_size):
        kind,tx,ty = q.popleft()

        for i in range(4):
            nx = tx+dx[i]
            ny = ty+dy[i]

            if nx<0 or nx == N or ny<0 or ny == N:
                continue
            if not visited[nx][ny]:
                visited[nx][ny] = kind
                q.append([kind,nx,ny])

print(visited[X-1][Y-1])

풀이

특별할게 없는 전형적인 bfs 풀이이다.

 

바이러스가 오름차순 순서대로 bfs 돌아야 하기 때문에 첫 배열에서 찾은 바이러스들을 오름차순으로 정렬해서 q에 넣어준다.

 

S번만 돌아야 하기 때문에 q_size를 측정해서 bfs 레벨을 체크해준다.

 

시간복잡도

N*N 배열이라고 할 때,

S에 따라 조금 다르겠지만 거의 모든칸을 방문하므로 O(N^2)이라 볼 수 있다.

'알고리즘 문제풀이' 카테고리의 다른 글

[백준 12851] 숨바꼭질 2 파이썬  (0) 2021.05.13
[백준 1034] 램프  (0) 2021.05.12
[백준 1027] 고층 건물  (0) 2021.05.12
[백준 1004] 어린왕자  (0) 2021.05.12
[백준 15954] 인형들  (0) 2021.05.11
'알고리즘 문제풀이' 카테고리의 다른 글
  • [백준 12851] 숨바꼭질 2 파이썬
  • [백준 1034] 램프
  • [백준 1027] 고층 건물
  • [백준 1004] 어린왕자
WildDevmon
WildDevmon
『앗! 야생의 개발몬(이)가 나타났다!』
  • WildDevmon
    야생의 개발몬
    WildDevmon
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • Server (5)
      • 알고리즘 문제풀이 (27)
      • 회고 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    카카오 필요스펙
    자바 프로세스 종료
    소가 길을 건너간 이유 5
    백준 1114
    1114백준
    백준 1027
    백준 17281
    백준1238
    네카라쿠배 취업
    코틀린 코루틴
    자바 최소공배수
    direct buffer
    우아한 종료
    백준 18405
    백준2262
    백준15954
    경력 서류
    자바 물리 메모리
    백준 램프
    컴공 취준
    백준 1114 파이썬
    preStop
    소수&팰린드롬
    백준 고층 건물
    백준6980
    자바 스레드 상태
    terminationGracePeriodSeconds
    통나무 자르기
    ai개발자
    네이티브 메모리
    백준 인형들
    다이렉트 버퍼
    백준1188
    2020 카카오 인턴
    파이썬
    백준 어린 왕자
    백준 1004
    백준 경쟁적 전염
    백준 1034
    백준 파티
    커널 스레드 상태
    백준 5347
    백준1747
    백준14465
    graceful shutdown
    백준 10610
    선발 명단
    백준 30
    합승 택시 요금
    자바 최대공약수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
WildDevmon
[백준 18405] 경쟁적 전염
상단으로

티스토리툴바