https://www.acmicpc.net/problem/7569
2022.06.22 - [알고리즘 공부] - [백준 7576] 토마토(파이썬)
이 문제는 토마토 문제랑 완전 같은 문제입니다.
"같은 걸 왜 다시 올리나요? 날먹하시나요?"
하실 수 있는데요.
다른 점이 하나 있죠.
이 문제는 3차원 배열을 써야한다는 사실.
bfs를 쓰면 쉬운 문제이지만
3차원 배열을 다루는 것에 익숙하지 않는 저는
처음에 고생을 많이 했었습니다.
#백준 7569번 토마토2
from collections import deque
M,N,H=map(int,input().split())
visited=[[[-1]*M for _ in range(N)] for _ in range(H)]
dx=[0,0,1,-1,0,0]
dy=[1,-1,0,0,0,0]
dz=[0,0,0,0,1,-1]
tomato=deque()
for h in range(H):
for i in range(N):
data=list(map(int,input().split()))
for j in range(M):
if data[j]==1:
visited[h][i][j]=0
tomato.append([i,j,h])
if data[j]==-1:
visited[h][i][j]=-2
while tomato:
x,y,z=tomato.popleft()
for d in range(6):
nx=x+dx[d]
ny=y+dy[d]
nz=z+dz[d]
if nx<0 or nx>=N or ny<0 or ny>=M or nz<0 or nz>=H:
continue
if not visited[nz][nx][ny]==-1:
continue
tomato.append([nx,ny,nz])
visited[nz][nx][ny]=visited[z][x][y]+1
answer=0
not_in=False
for h in range(H):
for i in range(N):
for j in range(M):
answer=max(answer,visited[h][i][j])
if visited[h][i][j]==-1:
not_in=True
if not_in==True:
print(-1)
else:
print(answer)
리스트의 3차원 활용에 대해서
따로 정리해서 생각해봄직한 문제입니다.
[백준16954번] 움직이는 미로 탈출(파이썬) (1) | 2022.07.01 |
---|---|
[백준 2573번] 빙산(파이썬) (0) | 2022.06.30 |
[백준 7576] 토마토(파이썬) (0) | 2022.06.22 |
[백준 16926번] 배열돌리기1(python) (0) | 2022.06.09 |
[백준 22858번] 원상복구(small) (python) (2) | 2022.06.07 |
댓글 영역