minwoo2944   2년 전

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)



fail   2년 전

29번째 줄 조건대로라면 상하 이동을 하다가 층을 넘나드는 현상이 발생하게 됩니다.

댓글을 작성하려면 로그인해야 합니다.