반응형
문제 설명
입출력 예제
풀이 코드
이 문제는 이전의 7576번 토마토 문제와 유사하지만 3차원 배열을 사용한다는 점이 다르다.
[Python/파이썬] 백준 7576 - 토마토
문제 설명 입출력 예제 풀이 코드 처음에는 시작지점의 인덱스 값을 bfs(x, y) 이런식으로 넘겨 탐색하도록 했지만 "예제 입력3"번 케이스에서만 계속 전혀 다른값이 나왔다. 이유는 다음과 같았다
hstory0208.tistory.com
3차원 배열을 사용한다는 점과, 6방향(앞,뒤,상,하,좌,우)로 움직인다는 점에 유의하자
정답 코드
from collections import deque
import sys
input = sys.stdin.readline
m, n, h = map(int, input().split()) # 열, 행, 상자수
boxes = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]
result = 0
q = deque()
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
def bfs():
while q:
box, x, y = q.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nbox = box + dz[i]
if 0 <= nbox < h and 0 <= nx < n and 0 <= ny < m:
if boxes[nbox][nx][ny] == 0:
q.append((nbox, nx, ny))
boxes[nbox][nx][ny] = boxes[box][x][y] + 1
for box in range(h):
for x in range(n):
for y in range(m):
if boxes[box][x][y] == 1:
q.append((box, x, y))
bfs()
for box in boxes:
for x in box:
for y in x:
if y == 0:
print(-1)
exit(0)
result = max(result, max(x))
print(result-1)
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 16236 - 아기 상어 (0) | 2023.05.24 |
---|---|
[Python/파이썬] 백준 7562 - 나이트의 이동 (0) | 2023.05.23 |
[Python/파이썬] 백준 14502 연구소 - (BFS + 백트래킹) (0) | 2023.05.22 |
[Python/파이썬] 백준 7576 - 토마토 (0) | 2023.05.21 |
[Python/파이썬] 백준 1937 - 욕심쟁이 판다 (0) | 2023.05.19 |