πŸ—οΈ Algorithm/🟩 λ°±μ€€

🟩 [λ°±μ€€] [Python] [BFS/DFS] 7569번_ν† λ§ˆν† 

Dbswnstjd 2022. 11. 17. 00:58

문제

https://www.acmicpc.net/problem/7569

 

7569번: ν† λ§ˆν† 

첫 μ€„μ—λŠ” μƒμžμ˜ 크기λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 두 μ •μˆ˜ M,Nκ³Ό μŒ“μ•„μ˜¬λ €μ§€λŠ” μƒμžμ˜ 수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Hκ°€ 주어진닀. M은 μƒμžμ˜ κ°€λ‘œ 칸의 수, N은 μƒμžμ˜ μ„Έλ‘œ 칸의 수λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

풀이

BFS둜 μ‰½κ²Œ ν’€ 수 μžˆμ§€λ§Œ 3차원 배열을 μ‚¬μš©ν•˜λ‹€ λ³΄λ‹ˆ 인덱슀 뢀뢄을 잘 μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž

# λ°±μ€€ 7569번 문제 - ν† λ§ˆν† 
from collections import deque
import sys
input = sys.stdin.readline
dx=[0,0,-1,1,0,0] # 높이
dy=[1,-1,0,0,0,0]
dz=[0,0,0,0,1,-1]
m,n,h = map(int, input().split())
graph = []
queue = deque()
for i in range(h):
    temp = []
    for j in range(n):
        temp.append(list(map(int, input().split())))
        for k in range(m):
            if temp[j][k] == 1:
                queue.append([i,j,k])
    graph.append(temp)

def bfs():
    while queue:
        x,y,z = queue.popleft()
        # i κ°€ 높이 
        # j κ°€ n
        # k κ°€ m
        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]
            # nx : 높이λ₯Ό λ„˜μœΌλ©΄ μ•ˆλ¨
            # ny : n을 λ„˜μœΌλ©΄ μ•ˆλ¨
            # nz : m을 λ„˜μœΌλ©΄ μ•ˆλ¨
            if 0<=nx<h and 0<=ny<n and 0<=nz<m and graph[nx][ny][nz] == 0:
                graph[nx][ny][nz] = graph[x][y][z] + 1
                queue.append((nx,ny,nz))

bfs()
answer = 0
for i in graph:
    for j in i:
        for k in j:
            if k == 0:
                print(-1)
                exit(0)
        answer = max(answer, max(j))
print(answer - 1)