[BOJ][๐ก5][๋ฐฑ์ค#07569] ํ ๋งํ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ฒ ์์ ํ ๋งํ ๋์ฅ์์๋ ํ ๋งํ ๋ฅผ ๋ณด๊ดํ๋ ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ ๋งํ ๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฒฉ์๋ชจ์ ์์์ ์นธ์ ํ๋์ฉ ๋ฃ์ ๋ค์, ์์๋ค์ ์์ง์ผ๋ก ์์ ์ฌ๋ ค์ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ค.
์ฐฝ๊ณ ์ ๋ณด๊ด๋๋ ํ ๋งํ ๋ค ์ค์๋ ์ ์ต์ ๊ฒ๋ ์์ง๋ง, ์์ง ์ต์ง ์์ ํ ๋งํ ๋ค๋ ์์ ์ ์๋ค. ๋ณด๊ด ํ ํ๋ฃจ๊ฐ ์ง๋๋ฉด, ์ต์ ํ ๋งํ ๋ค์ ์ธ์ ํ ๊ณณ์ ์๋ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ต์ ํ ๋งํ ์ ์ํฅ์ ๋ฐ์ ์ต๊ฒ ๋๋ค. ํ๋์ ํ ๋งํ ์ ์ธ์ ํ ๊ณณ์ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ๋ค ์ฌ์ฏ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ฅผ ์๋ฏธํ๋ค. ๋๊ฐ์ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ค์๊ฒ๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ฉฐ, ํ ๋งํ ๊ฐ ํผ์ ์ ์ ๋ก ์ต๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฒ ์๋ ์ฐฝ๊ณ ์ ๋ณด๊ด๋ ํ ๋งํ ๋ค์ด ๋ฉฐ์น ์ด ์ง๋๋ฉด ๋ค ์ต๊ฒ ๋๋์ง ๊ทธ ์ต์ ์ผ์๋ฅผ ์๊ณ ์ถ์ด ํ๋ค. ํ ๋งํ ๋ฅผ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ ๊ฒฉ์๋ชจ์์ ์์๋ค์ ํฌ๊ธฐ์ ์ต์ ํ ๋งํ ๋ค๊ณผ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฉฐ์น ์ด ์ง๋๋ฉด ํ ๋งํ ๋ค์ด ๋ชจ๋ ์ต๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ๋จ, ์์์ ์ผ๋ถ ์นธ์๋ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์๋ ์๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ M,N๊ณผ ์์์ฌ๋ ค์ง๋ ์์์ ์๋ฅผ ๋ํ๋ด๋ H๊ฐ ์ฃผ์ด์ง๋ค. M์ ์์์ ๊ฐ๋ก ์นธ์ ์, N์ ์์์ ์ธ๋ก ์นธ์ ์๋ฅผ ๋ํ๋ธ๋ค. ๋จ, 2 โค M โค 100, 2 โค N โค 100, 1 โค H โค 100 ์ด๋ค. ๋์งธ ์ค๋ถํฐ๋ ๊ฐ์ฅ ๋ฐ์ ์์๋ถํฐ ๊ฐ์ฅ ์์ ์์๊น์ง์ ์ ์ฅ๋ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์ฆ, ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ํ๋์ ์์์ ๋ด๊ธด ํ ๋งํ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์ค์๋ ์์ ๊ฐ๋ก์ค์ ๋ค์ด์๋ ํ ๋งํ ๋ค์ ์ํ๊ฐ M๊ฐ์ ์ ์๋ก ์ฃผ์ด์ง๋ค. ์ ์ 1์ ์ต์ ํ ๋งํ , ์ ์ 0 ์ ์ต์ง ์์ ํ ๋งํ , ์ ์ -1์ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์นธ์ ๋ํ๋ธ๋ค. ์ด๋ฌํ N๊ฐ์ ์ค์ด H๋ฒ ๋ฐ๋ณตํ์ฌ ์ฃผ์ด์ง๋ค. ํ ๋งํ ๊ฐ ํ๋ ์ด์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฌ๋ฌ๋ถ์ ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์ ๋๊น์ง ์ต์ ๋ฉฐ์น ์ด ๊ฑธ๋ฆฌ๋์ง๋ฅผ ๊ณ์ฐํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ๋ง์ฝ, ์ ์ฅ๋ ๋๋ถํฐ ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต์ด์๋ ์ํ์ด๋ฉด 0์ ์ถ๋ ฅํด์ผ ํ๊ณ , ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์ง๋ ๋ชปํ๋ ์ํฉ์ด๋ฉด -1์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์
์์ 1
์ ๋ ฅ
5 3 1
0 -1 0 0 0
-1 -1 0 1 1
0 0 0 1 1
์ถ๋ ฅ
-1
์์ 2
์ ๋ ฅ
5 3 2
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
์ถ๋ ฅ
4
์์ 3
์ ๋ ฅ
4 3 2
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
-1 -1 -1 -1
1 1 1 -1
์ถ๋ ฅ
0
My Sol
import sys
input = sys.stdin.readline
# ํ๋๋ผ๋ 0์ด ์์ผ๋ฉด True, ์๋๋ฉด False
def checkZero():
global cube, H, I, J
for h in range(H):
for i in range(I):
for j in range(J):
if not cube[h][i][j]:
return 1
return 0
# ์
๋ ฅ ์ฒ๋ฆฌ
J, I, H = map(int, input().split())
cube = []
for _ in range(H):
mat = [list(map(int, input().split())) for _ in range(I)]
cube.append(mat)
# ์ ์ฅ๋ ๋๋ถํฐ ๋ชจ๋ ์ต์ผ๋ฉด(0์ด ์์ผ๋ฉด) 0 ์ถ๋ ฅ
if not checkZero():
print(0)
quit()
# 1์ ์ขํ๋ฅผ Q์ ์ฝ์
Q = []
front, back = -1, 0
for h in range(H):
for i in range(I):
for j in range(J):
if cube[h][i][j]==1:
Q.append((0, h, i, j))
back += 1
# ์์ฑ ์์
max_day = 0
while front < back-1:
front += 1
nday, nh, ni, nj = Q[front]
dhij = [(0,-1,0), (0,1,0), (0,0,-1), (0,0,1), (1,0,0), (-1,0,0)]
for dh, di, dj in dhij:
# ํ์ ๋ฐฉํฅ์ด ์์ ๋ฒ์ ์ด๋ด์ด๊ณ
if (0<=nh+dh<H) and (0<=ni+di<I) and (0<=nj+dj<J):
# ์ ์ต์ ํ ๋งํ ๋ผ๋ฉด
if not cube[nh+dh][ni+di][nj+dj]:
# cube์ ํ์ ์์น๋ฅผ ์ฒดํฌ
cube[nh+dh][ni+di][nj+dj] = 1
# Q์ ํ์ ์ขํ์ ์ผ์๋ฅผ ์ถ๊ฐ
Q.append((nday+1, nh+dh, ni+di, nj+dj))
back += 1
if max_day < nday+1:
max_day = nday+1
# ์์ฑ ๋ชจ๋ ๋ง์น๊ณ ์ ์ต์ ํ ๋งํ ๊ฐ ์๋ค๋ฉด -1 ์ถ๋ ฅ, ์๋๋ผ๋ฉด max_day ์ถ๋ ฅ
print(-1 if checkZero() else max_day)
BFS๋ฅผ ์ด์ฉํ๋ ๋ฌธ์ ์๊ณ , ์ฒ์์ผ๋ก 3์ฐจ์ ๋ฐฉ์์ผ๋ก ํ์ด๋ณด๋ ๋ฌธ์ ์๋ค. ์ฐจ์์ด ํ๋ฉด์์ ์ ์ฒด๊ฐ ๋์์ ๋ฟ, ๋ฒกํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ด๋ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๊ธฐ์กด๊ณผ ๋น์ทํ๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ์ด๋ ต์ง ์๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ค.
์ฒ์๋ถํฐ ์ ์ต์ ํ ๋งํ ๊ฐ ์๋ ๊ฒฝ์ฐ : ์์ ํ์
์ฒ์๋ถํฐ ์ ์ต์ ํ ๋งํ , ์ฆ 0์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ํ๋ณํ๊ธฐ ์ํด checkZero() ํจ์๋ฅผ ์์ฑํ์๋ค. cube์ ๋ชจ๋ ์นธ์ ๋๋ฉฐ ๊ฐ์ด 0, ์ฆ False์ธ ๊ฒฝ์ฐ๋ฅผ ๋ง์ฃผ์น๋ค๋ฉด ์ฆ์ 1์ ๋ฐํํ๊ณ , ๋๊น์ง ํ์ํ๋๋ฐ๋ 0์ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค๋ฉด 0์ ๋ฐํํ๋ค. ์ด๋ฅผ ํตํด ๋ง์ฝ checkZero๊ฐ 0์ ๋ฐํํ๋ค๋ฉด ์ฒ์๋ถํฐ ์ตํ ํ ๋งํ ๊ฐ ์๊ธฐ ๋๋ฌธ์ 0์ ์ถ๋ ฅํ๊ณ ๋๋ธ๋ค.
์์ฑ ๊ณผ์ : BFS
๊ธฐ์กด delta๋ฅผ ๊ฐ๋ก, ์ธ๋ก์ ๋ํด์๋ง ์ ์ํ๋ค๋ฉด, 3์ฐจ์์ ๋์ ํด ์ ์๋ ์ธต์ ๊ฐ๊น์ง ํ์ธํ๋ฉด ๋๊ฒ ๋ค. ๋๊ฐ์ด ๋ฒ์ ๋ด์ธ์ง ํ์ธํ๊ณ ๊ฐ์ด 0์ด๋ผ๋ฉด ์ฒดํฌํ๊ณ Queue์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ