λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Coding Test/Algorithms

[λ°±μ€€] 7569. ν† λ§ˆν† /Python - Gold5

by The Future Engineer, Lucy 2025. 2. 9.
728x90
λ°˜μ‘ν˜•

β“λ¬Έμ œ

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

μ„±λŠ₯ μš”μ•½

λ©”λͺ¨λ¦¬: 227700 KB, μ‹œκ°„: 696 ms

λΆ„λ₯˜

λ„ˆλΉ„ μš°μ„  탐색, κ·Έλž˜ν”„ 이둠, κ·Έλž˜ν”„ 탐색

 

문제 μ„€λͺ…

철수의 ν† λ§ˆν†  농μž₯μ—μ„œλŠ” ν† λ§ˆν† λ₯Ό λ³΄κ΄€ν•˜λŠ” 큰 μ°½κ³ λ₯Ό 가지고 μžˆλ‹€. ν† λ§ˆν† λŠ” μ•„λž˜μ˜ κ·Έλ¦Όκ³Ό 같이 격자λͺ¨μ–‘ μƒμžμ˜ 칸에 ν•˜λ‚˜μ”© 넣은 λ‹€μŒ, μƒμžλ“€μ„ 수직으둜 μŒ“μ•„ μ˜¬λ €μ„œ 창고에 λ³΄κ΄€ν•œλ‹€.

창고에 λ³΄κ΄€λ˜λŠ” ν† λ§ˆν† λ“€ μ€‘μ—λŠ” 잘 읡은 것도 μžˆμ§€λ§Œ, 아직 읡지 μ•Šμ€ ν† λ§ˆν† λ“€λ„ μžˆμ„ 수 μžˆλ‹€. 보관 ν›„ ν•˜λ£¨κ°€ μ§€λ‚˜λ©΄, 읡은 ν† λ§ˆν† λ“€μ˜ μΈμ ‘ν•œ 곳에 μžˆλŠ” 읡지 μ•Šμ€ ν† λ§ˆν† λ“€μ€ 읡은 ν† λ§ˆν† μ˜ 영ν–₯을 λ°›μ•„ 읡게 λœλ‹€. ν•˜λ‚˜μ˜ ν† λ§ˆν† μ— μΈμ ‘ν•œ 곳은 μœ„, μ•„λž˜, μ™Όμͺ½, 였λ₯Έμͺ½, μ•ž, λ’€ μ—¬μ„― λ°©ν–₯에 μžˆλŠ” ν† λ§ˆν† λ₯Ό μ˜λ―Έν•œλ‹€. λŒ€κ°μ„  λ°©ν–₯에 μžˆλŠ” ν† λ§ˆν† λ“€μ—κ²ŒλŠ” 영ν–₯을 주지 λͺ»ν•˜λ©°, ν† λ§ˆν† κ°€ 혼자 μ €μ ˆλ‘œ μ΅λŠ” κ²½μš°λŠ” μ—†λ‹€κ³  κ°€μ •ν•œλ‹€. μ² μˆ˜λŠ” 창고에 λ³΄κ΄€λœ ν† λ§ˆν† λ“€μ΄ 며칠이 μ§€λ‚˜λ©΄ λ‹€ 읡게 λ˜λŠ”μ§€ κ·Έ μ΅œμ†Œ 일수λ₯Ό μ•Œκ³  μ‹Άμ–΄ ν•œλ‹€.

ν† λ§ˆν† λ₯Ό 창고에 λ³΄κ΄€ν•˜λŠ” 격자λͺ¨μ–‘μ˜ μƒμžλ“€μ˜ 크기와 읡은 ν† λ§ˆν† λ“€κ³Ό 읡지 μ•Šμ€ ν† λ§ˆν† λ“€μ˜ 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 며칠이 μ§€λ‚˜λ©΄ ν† λ§ˆν† λ“€μ΄ λͺ¨λ‘ μ΅λŠ”μ§€, κ·Έ μ΅œμ†Œ 일수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ. 단, μƒμžμ˜ 일뢀 μΉΈμ—λŠ” ν† λ§ˆν† κ°€ λ“€μ–΄μžˆμ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€.

βœπŸ»ν’€μ΄

2024.11.04 - [Coding Test] - [λ°±μ€€] 7576.ν† λ§ˆν† /Python - Gold5

 

[λ°±μ€€] 7576.ν† λ§ˆν† /Python - Gold5

β“λ¬Έμ œhttps://www.acmicpc.net/problem/7576μ„±λŠ₯ μš”μ•½μ½”λ“œ1 ➑️ λ©”λͺ¨λ¦¬: 156792 KB, μ‹œκ°„: 460 msμ½”λ“œ2 ➑️ λ©”λͺ¨λ¦¬: 228982 KB, μ‹œκ°„: 448 ms λ¬Έμ œ μ„€λͺ…μ² μˆ˜μ˜ ν† λ§ˆν†  농μž₯μ—μ„œλŠ” ν† λ§ˆν† λ₯Ό λ³΄κ΄€ν•˜λŠ” 큰 μ°½κ³ λ₯Ό κ°€

lucy-devblog.tistory.com

이 λ¬Έμ œλŠ” BFS둜 단지 κΈ°μ‘΄ ν† λ§ˆν†  2μ°¨μ›μ—μ„œ 3μ°¨μ›μœΌλ‘œ λ°”κΌˆμ„ 뿐이닀.

λ§ˆμ°¬κ°€μ§€λ‘œ λ¨Όμ € 읡은 ν† λ§ˆν† κ°€ μžˆλŠ” μœ„μΉ˜λ₯Ό μ°Ύμ•„μ„œ 큐에 λ„£λŠ”λ‹€. 큐에 넣은 μœ„μΉ˜μ—  따라 xμΆ•, yμΆ•, zμΆ•μœΌλ‘œ λŒ€κ°μ„ μ„ μ œμ™Έν•˜κ³  읡지 μ•Šμ€ ν† λ§ˆν† μ˜ μœ„μΉ˜λ₯Ό μ°ΎλŠ”λ‹€. 읡지 μ•Šμ€ ν† λ§ˆν† λ₯Ό 1둜 λ°”κΏ”μ„œ 읡은 ν† λ§ˆν† λ‘œ κΈ°λ‘ν•˜κ³  μ’Œν‘œμ™€ λ‚ μ§œλ₯Ό 같이 κΈ°λ‘ν•˜μ—¬ 큐에 λ„£λŠ”λ‹€. 

ν† λ§ˆν† λ₯Ό λ‹€ 읡은 ν›„ λ§Œμ•½ 읡은 ν† λ§ˆν† μ˜ 영ν–₯을 받지 λͺ»ν•΄ 읡지 μ•Šμ€ ν† λ§ˆν† κ°€ λ‚¨μ•„μžˆλ‹€λ©΄ -1을 좜λ ₯ν•œλ‹€.

πŸ’»μ½”λ“œ

import sys
from collections import deque

input = sys.stdin.readline

# 1 -> 읡은 ν† λ§ˆν† , 0 -> 읡지 μ•Šμ€ ν† λ§ˆν† , -1 -> 빈 κ³³
M, N, H = map(int, input().split()) #M -> x, N -> y, H -> z
graph = []
for _ in range(H):
    box = []
    for _ in range(N):
        box.append(list(map(int, input().split())))
    graph.append(box)

dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]

q = deque()
def bfs():
    day = 0
    while q:
        cx, cy, cz, d = q.popleft()

        for i in range(6):
            nx, ny, nz = cx + dx[i], cy + dy[i], cz + dz[i]
            if 0 <= nx < M and 0 <= ny < N and 0 <= nz < H:
                if graph[nz][ny][nx] == 0:
                    graph[nz][ny][nx] = 1
                    day = d + 1
                    q.append((nx, ny, nz, d + 1))

    return day

# 읡은 ν† λ§ˆν†  μžˆλŠ” μœ„μΉ˜ 탐색
for z in range(H):
    for y in range(N):
        for x in range(M):
            if graph[z][y][x] == 1:
                q.append((x, y, z, 0))

res = bfs()

if any(graph[i][j][k] == 0 for i in range(H) for j in range(N) for k in range(M)):
    print(-1)
else:
    print(res)

πŸ“ν›„κΈ°

μ²˜μŒμ— κ·Έλƒ₯ 2차원 배열에 κ΄„ν˜Έ ν•˜λ‚˜λ§Œ 더 μ”Œμ›Œμ£Όλ©΄ 3차원 λ˜λŠ” 쀄 μ•Œμ•˜λŠ”λ° μ•„λ‹ˆμ—ˆλ‹€..

728x90
λ°˜μ‘ν˜•