접근
바로 전 토마토 문제와 유사하고, 풀이 방법도 유사하다. 참고하여 풀면 될 것 같다.
다만 기존 코드에 높이 변수만 추가하여 작성했더니 Python에서 시간초과, PyPy3에서 시간안에 풀어주었다.
while q: 부분을 bfs 함수로 만들어주었더니 간신히 Python에서도 시간안에 통과하였다.
BFS 유사 문제 참조: 2021.04.11 - [코딩/백준 (Python)] - 백준 7576번: 토마토 (Python)
코드
import sys
from collections import deque
n, m, h = map(int, sys.stdin.readline().split())
tomato = [[list(map(int, sys.stdin.readline().split())) for _ in range(m)] for __ in range(h)]
q = deque([])
for i in range(h):
for j in range(m):
for k in range(n):
if tomato[i][j][k] == 1:
q.append([i, j, k])
dx = [1, 0, -1, 0, 0, 0]
dy = [0, 1, 0, -1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
def bfs():
while q:
now = q.popleft()
for i in range(6):
nx = now[0] + dx[i]
ny = now[1] + dy[i]
nz = now[2] + dz[i]
if 0 <= nx < h and 0 <= ny < m and 0 <= nz < n and tomato[nx][ny][nz] == 0:
tomato[nx][ny][nz] = tomato[now[0]][now[1]][now[2]] + 1
q.append([nx, ny, nz])
bfs()
maximum = 0
all = True
for i in tomato:
for j in i:
for k in j:
if k > maximum:
maximum = k
if k == 0:
all = False
if all:
print(maximum - 1)
else:
print(-1)
더 생각해 볼 것?
while q: 부분을 bfs 함수로 넣었을 때 통과할 수 있는 이유는 파이썬에서 전역변수 참조가 지역변수 참조보다 느려서 그렇다고 한다. 아직 이해가 잘은 안되지만 파이썬이 그렇다고 하니.. 받아들이고 이에 대해서도 공부가 필요할 것 같다.
코드나 내용 관련 조언, 부족한 점 및 질문 언제든 환영합니다!
반응형
'코딩 > 백준 (Python)' 카테고리의 다른 글
백준 7562번: 나이트의 이동 (Python) (0) | 2021.04.13 |
---|---|
백준 1697번: 숨바꼭질 (Python) (0) | 2021.04.12 |
백준 7576번: 토마토 (Python) (0) | 2021.04.11 |
백준 2178번: 미로 탐색 (Python) (0) | 2021.04.11 |
백준 2667번: 단지번호붙이기 (Python) (0) | 2021.04.11 |
최근댓글