백준 18405 경쟁적 전염 Python 풀이

2021. 11. 3. 22:46·Algorithm (PS)
728x90

유형 : DFS/BFS 

1. 바이러스의 종류는 1 ~ K 로, K 개이다. 

이 문제를 풀 때 바이러스가 상 하 좌 우 로 번식한다고 하니 

dfs / bfs로 이동하는걸 떠올렸다. 

그런데 나는 처음에 풀 때 dfs라고 생각했다 그런데 계속 재귀 호출 에러가 났다.

이 문제는 bfs로 풀어야 한다.

왜...? 왜일까 

bfs로 풀면 바이러스를 오름차순으로 정렬한다음에, 탐색할 수 있다 !!! 

풀이를 정리해 보면

1. graph 를 생성 !

정보를 받을 때 0초로 초기화 해서 저장한다. 이 문제의 특징은 s초가 지난 후의 x,y 좌표에 존재하는 바이러스 타입이 무엇인지 묻는 것이기 때문에 초 정보도 저장하는 것이 좋다.

2. 오름차순으로 바이러스 정렬

3. bfs 실행

# 경쟁적 전염
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 i in range(n):
    for j in range(n):
        if graph[i][j] != 0:
            data.append((graph[i][j],0,i,j)) # 바이러스 종류 - s - x - y

s, target_x, target_y = map(int, input().split())

dx = [1,-1,0,0]
dy = [0,0,1,-1]

data.sort()
q = deque(data)

while q:
    virus, time, x, y = q.popleft()
    if time == 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, time+1, nx, ny))

print(graph[target_x-1][target_y-1])
728x90

'Algorithm (PS)' 카테고리의 다른 글

1715 파이썬 카드 정렬하기  (0) 2021.11.07
[프로그래머스] 카카오 신입 공채 2020 - 괄호변환  (0) 2021.11.03
[백준/파이썬/삼성] 14502 파이썬 풀이  (0) 2021.10.31
[프로그래머스/카카오] 외벽점검  (0) 2021.10.31
백준 15868 치킨배달 파이썬, 삼성 SW 기출문제  (0) 2021.10.26
'Algorithm (PS)' 카테고리의 다른 글
  • 1715 파이썬 카드 정렬하기
  • [프로그래머스] 카카오 신입 공채 2020 - 괄호변환
  • [백준/파이썬/삼성] 14502 파이썬 풀이
  • [프로그래머스/카카오] 외벽점검
minjiwoo
minjiwoo
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minji's engineering noteData Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험과 공부한 내용을 기록하며 지속가능한 엔지니어가 되는 것이 꿈입니다.
minjiwoo
minji's engineering note
minjiwoo
전체
오늘
어제
  • 분류 전체보기 (613)
    • Data Engineering (42)
      • Apache Spark (11)
      • Databricks & Delta Lake (9)
      • Airflow (3)
      • SQL (6)
      • Trouble Shooting (2)
      • Hadoop (2)
      • MLOps (1)
    • Cloud Engineering (104)
      • AWS (23)
      • Linux 🐧 (29)
      • Docker 🐳 (21)
      • Kubernetes ⚙️ (20)
      • Ansible (10)
    • Computer Science (87)
      • 네트워크 (9)
      • 운영체제 (25)
      • 정보처리기사 (48)
      • CS 기술 면접 스터디 (3)
    • Programming Languages (27)
      • Python (17)
      • C와 C++ (10)
    • Backend (5)
      • Django (2)
    • 프로젝트 (2)
      • 테크포임팩트 (2)
    • iOS (11)
      • 레이블러리 (2)
    • Algorithm (PS) (275)
      • LeetCode (6)
    • 개발일기 (30)
      • 내돈내산 후기🎮 (3)
      • 개발자 취준생 (5)
      • Today I Learned (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Hi there

인기 글

태그

  • 리눅스
  • Databricks
  • ansible
  • SPARK
  • 빅데이터
  • 프로그래머스
  • 운영체제
  • 클라우드
  • 스파크
  • 데이터엔지니어링
  • dfs
  • 쿠버네티스
  • AWS
  • 백트래킹
  • 파이썬
  • docker
  • 카카오코딩테스트
  • Swift
  • Kubernetes
  • 코딩테스트
  • python
  • 데이터엔지니어
  • 데이터브릭스
  • EC2
  • 백준
  • Leetcode
  • linux
  • 알고리즘
  • dp
  • BFS

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
minjiwoo
백준 18405 경쟁적 전염 Python 풀이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.