2022. 1. 26. 11:44ใ๐ฑ Algorithm/BFS DFS
https://www.acmicpc.net/problem/7569
์ ๋ต ์ฝ๋
from collections import deque
from itertools import chain
from sys import stdin
M, N, H = map(int, stdin.readline().split())
board = []
queue = deque()
for h in range(H):
temp = []
for n in range(N):
temp.append(list(map(int, stdin.readline().split())))
for m in range(M):
if temp[n][m] == 1:
queue.append((h, n, m))
board.append(temp)
dh = [0, 0, 0, 0, 1, -1]
dc = [0, 0, 1, -1, 0, 0]
dr = [1, -1, 0, 0, 0, 0]
while queue:
h, r, c = queue.popleft()
for i in range(6):
nh = h + dh[i]
nr = r + dr[i]
nc = c + dc[i]
if nh < 0 or nh >= H or nc < 0 or nc >= M or nr < 0 or nr >= N:
continue
if board[nh][nr][nc] == 0:
queue.append((nh, nr, nc))
board[nh][nr][nc] = board[h][r][c] + 1
answer = 1
for b in board:
for c in chain(b):
if 0 in c:
print(-1)
exit()
else:
answer = max(max(c), answer)
print(answer - 1)
์ ๊ทผ
์ฐ์ ๊ตฌํ๊ณ ์ ํ๋ ๊ฒ์ ์นธ์ ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต์ ๋๊น์ง์ ์ต์ ๋ ์ง ๋ค.
๊ทธ ์ค ์ต์ง ๋ชปํ๋ ์นธ์ด ์๋ค๋ฉด -1 ์ ๋ฆฌํดํ๋ฉด ๋๋ค. ๊ทธ๋์ ์ฒ์์ 0์ธ ์นธ์ ์ฐจ๋ก๋๋ก 1๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ ์ด๋ค ์นธ์ด, ๋ช์ผ ์งธ์ 1์ด ๋๋์ง ํ๋ณ ํ ์ ์๋ค๋ ์ ์ด๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ธ์ ํ ์นธ(0์ธ ์ง์ )์ 1๋ก ๋ฐ๊พธ๋ ๋์ , ์ธ์ ์์์ ๊ฐ์ +1์ ํ์ฌ ๊ฐ์ ๋ถ์ฌํ๋ฉด ๋๋ค.
ํน์ด์
์ด ๋ฌธ์ ๋ 3์ฐจ์์ ๋ค๋ฃฌ๋ค. (3์ฐจ ๋ฐฐ์ด) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ -1์ ์ถ๋ ฅํด์ผ ํ๋ ์ํฉ์ ๊ฒ์ฆํ๋ ค๋ฉด for ๋ฌธ์ 3๋ฒ ๋๋ ค์ผํ๋๋ฐ, ๊ฐ์ธ์ ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ 3๋ฒ์ด๋ ์ฌ์ฉํ๋๊ฑด ๊น๋ํ์ง ์๋ค๊ณ ์๊ฐํ์ฌ itertools ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ chain() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. chain() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด 2์ฐจ ๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ 1์ฐจ ๋ฐฐ์ด๋ก flatten ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์, ์ด์ค for ๋ฌธ์ผ๋ก๋ ์ถฉ๋ถํ ๊ฒ์ฆ์ด ๊ฐ๋ฅํด์ง๋ค.
'๐ฑ Algorithm > BFS DFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2210 ์ซ์ํ๊ด๋ฆฌ ํ์ด์ฌ (0) | 2022.12.29 |
---|---|
๋ฐฑ์ค ์ ํ ์ ํ 11060 ํ์ด์ฌ (0) | 2022.03.11 |