โ๋ฌธ์
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์ฐจ์ ๋๋ ์ค ์์๋๋ฐ ์๋์๋ค..
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2206. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ/Python - Gold 3 (0) | 2025.02.12 |
---|---|
[๋ฐฑ์ค] 16928. ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์/Python - Gold5 (0) | 2025.02.10 |
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ๋ฐฐ์ถ/Python - Silver 2 (0) | 2025.02.06 |
[๋ฐฑ์ค] 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ/Python - Silver 1 (1) | 2025.02.05 |
[๋ฐฑ์ค] 24480. ์๊ณ ๋ฆฌ์ฆ ์์ - ๊น์ด ์ฐ์ ํ์ 2/Python - Silver 2 (0) | 2025.02.04 |