3차원으로 풀었을 때는 정답이었는데, 3중 for문을 줄이기 위해 2차원으로 변환해서 다시 풀어보려니 계속 오답으로 뜨네요
혹시 뭐가 문제인지 알 수 있을까요 ?
이건 3차원 정답 코드입니다.
import sys
from collections import deque
read = sys.stdin.readline
m,n,h = map(int, read().split())
graph = []
for _ in range(h):
graph.append([ list(map(int,read().split())) for _ in range(n) ])
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
queue = deque()
result = -1
def bfs():
global result
while queue:
x,y,z = queue.popleft()
#2차원 상,하,왼쪽,오른쪽,3차원 위,아래 총 6가지 이동
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0 <= nx < h and 0 <= ny < n and 0 <= nz < m :
if graph[nx][ny][nz] == 0 :
queue.append((nx,ny,nz))
graph[nx][ny][nz] = graph[x][y][z] + 1
result = max(result, graph[nx][ny][nz])
is_aleady_done = True
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k] == 0:
is_aleady_done = False
elif graph[i][j][k] == 1:
queue.append((i,j,k))
# 0값이 존재하지 않을 경우 0출력
if is_aleady_done == True:
print(0)
exit(0)
#bfs실행
bfs()
#bfs를 돌았으나 0이 하나라도 있으면 -1출력
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k] == 0:
print(-1)
exit(0)
print(result - 1)
minwoo2944 2년 전
3차원으로 풀었을 때는 정답이었는데, 3중 for문을 줄이기 위해 2차원으로 변환해서 다시 풀어보려니 계속 오답으로 뜨네요
혹시 뭐가 문제인지 알 수 있을까요 ?
이건 3차원 정답 코드입니다.