[백준] Python 알고리즘 연습 Day41
회복하고 다시 BFS,DFS 문제를 풀기 시작했다. 최근 들여다보지 못해서인지 시간이 조금 오래 걸렸다. 문제 자체가 어려웠던 것도 있는 것 같긴하다. 다시 열심히 달려보자.
백준 7569번 토마토
import sys
from collections import deque
M,N,H = map(int,sys.stdin.readline().split())
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
graph = []
queue = deque()
for i in range(H):
tmp = []
for j in range(N):
tmp.append(list(map(int,sys.stdin.readline().split())))
for k in range(M):
# tmp의 원소 중 1이면 큐에 추가
if tmp[j][k] == 1:
queue.append([i, j, k])
# 3차원 배열 만듬
graph.append(tmp)
while queue:
# 이 부분에서 헷갈렸다. x가 높이 y가 세로 z가 가로를 의미한다.
# 위의 for문에서 queue에 넣을 때 이 순서로 들어가기 때문
x,y,z = queue.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
# 따라서 여기서 nx에 H가 들어가는 것이다.
if 0<=nx<H and 0<=ny<N and 0<=nz<M and graph[nx][ny][nz]==0:
queue.append([nx,ny,nz])
graph[nx][ny][nz] = graph[x][y][z]+1
cnt = 0
for i in graph:
for j in i:
for k in j:
# bfs 지나도 0이면 토마토 못익음, -1, 프로그램 종료
if k == 0:
print(-1)
exit(0)
cnt = max(cnt, max(j))
# 시작지점 1이므로 -1 해야함
print(cnt-1)
Author And Source
이 문제에 관하여([백준] Python 알고리즘 연습 Day41), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@colacan100/백준-Python-알고리즘-연습-Day40-d6s1vevn저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)