본문 바로가기
카테고리 없음

이코테 - Ch13. 경쟁적 전염 (DFS/BFS, 실버 1)

by 파피 2021. 6. 28.

#1. 설계 및 풀이

 

# 경쟁적 전염

# 설계
'''
1. 바이러스를 번호순으로 큐에 넣는다. (x, y, 번호, sec)
2. 큐에서 하나씩 꺼내서 바이러스가 전염될 수 있으면 sec+1한 값을 큐에 넣는다.
3. sec이 s인 경우 break
4. 답 출력
'''

import sys
from collections import deque

input = sys.stdin.readline

n, k = map(int, input().strip().split())
area = [list(map(int, input().strip().split())) for _ in range(n)]
s, x, y = map(int, input().strip().split())

x -=1
y -=1

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

q = deque()

# 바이러스를 번호순으로 큐에 넣기
for i in range(n) :
    for j in range(n) :
        if area[i][j] > 0 :
            q.append((i, j, area[i][j], 0))

### 주의! sorted는 정렬된 리스트를 반환하므로 deque() 처리후 대입해줘야한다.
q = deque(sorted(q, key=lambda x : x[2]))


while q :
    r, c, num, sec = q.popleft()

    if sec == s :
        break

    for dir in range(4) :
        nr, nc = r + dx[dir], c + dy[dir]

        if 0 <= nr < n and 0 <= nc < n :
            if area[nr][nc] == 0 :
                area[nr][nc] = num
                q.append((nr, nc, num, sec+1))

print(area[x][y])

 

#2. 개선할 점

 

로직은 맞는 것 같은데 자꾸 틀려서 왜틀렸나했더니

sorted를 사용만하고 대입을 안해줘서 틀린거였다 .............

 

다신 이런 실수 하지말자 !

댓글