๐งโ๐ป [Python] ๋ฐฑ์ค 7569 ํ ๋งํ
Gold 5 - BFS
๋ฌด์กฐ๊ฑด BFS๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ด๋ค
์์์ ์ด ํ๋๊ฐ ์๋ ์ ์๋ค
- ๊ทธ๋์ queue ์์๋ค ์์์ ๋ค์ ๋ชจ๋ ์ฐพ์์ ๋ฃ๋๋ค
BFS๋ฅผ ํ ๋๋ง๋ค ์ฃผ๋ณ ๋ ธ๋์๋ค ๋ฐฉ๋ฌธ ํ์ ๋์ 1์ ๋ํด์, ๋ํ ์ซ์๋ฅผ ๋ฃ๋๋ค
๋ง์ง๋ง์ ๋ค์ ํ์์ ํด์ผํ๋๋ฐ, 0์ด ํ๋๋ผ๋ ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๊ณ , ๊ทธ๊ฒ ์๋๋ฉด ๋ํ ์ซ์๋ค ์ค ์ ์ผ ํฐ ์ซ์์ 1์ ๋นผ์, ๋ต์ ์ถ๋ ฅํ๋ค
7576๊ณผ ๊ฐ์ ๋ฌธ์ ์ด์ง๋ง, ๋์ด๊ฐ ์ถ๊ฐ๊ฐ ๋์๋ค
- 3์ค ํฌ๋ฌธ์ ์ฐ๋, 3์ค ๋ฆฌ์คํธ ์ฌ์ฉ๋ฒ์ ์ตํ์ผ ํ
๋ฌธ์ ํ์ด
bfs
์- ์ฃผ๋ณ์ ํ์ํ๊ณ , ์ฃผ๋ณ์ ์๋ ๋
ธ๋ ์์ฃผ๋ก ํ์ํ๊ธฐ ์ํด
popleft
๋ฅผ ์ฌ์ฉ
- ์ฃผ๋ณ์ ํ์ํ๊ณ , ์ฃผ๋ณ์ ์๋ ๋
ธ๋ ์์ฃผ๋ก ํ์ํ๊ธฐ ์ํด
- ์ฒซ for๋ฌธ
queue
์๋ค๊ฐ ์์ ์ ๋ค์ ๋ฃ๋๋ค- ์์์ ์ด ํ๋์ผ ๋์๋ for๋ฌธ์ ๋๋ฆด ํ์๊ฐ ์์ง๋ง, ์ด ๋ฌธ์ ์์๋ ์์์ ์ด 1๊ฐ ์ด์์ด ์ฃผ์ด์ง ์ ์๋ค
- ๋๋ฒ์งธ for๋ฌธ
- ๊ฒฐ๊ณผ๊ฐ์ ํ์ํ๋ค
- bfs๋ฅผ ๋ค ๋๊ณ ๋๋ฉด, box์ ๋ช ์ผ์ด ์ง๋ฌ๋์ง, ์ซ์๋ค์ด ํ๊ธฐ๋์ด ์๋ค
- ๊ฐ ์ด์ ๋๋ฉฐ, ์ด์์ ์ ์ผ ํฐ ์ซ์๋ฅผ
answer
์ ์ ์ฅ์ ํ๋ค - ๋จ, 0์ด ํ๋๋ผ๋ ๋ฐ๊ฒฌ์ด ๋๋ค๋ฉด,
flag
๋ False๋ก ๋ฐ๊พผ๋ค- ์ด ๋ป์, ๋ชจ๋ ํ ๋งํ ๊ฐ ๋ค ์ต์ง ๋ชป ํ๋ค๋ ๊ฒ์ด๋ค
- ์ฆ -1์ ์ถ๋ ฅํด์ผ ํ๋ค
์ฝ๋
from collections import deque
def bfs(queue):
while queue:
current_h, current_r, current_c = queue.popleft()
for i in range(6):
sh, sr, sc = current_h + dh[i], current_r + dr[i], current_c + dc[i]
if 0 <= sr < N and 0 <= sc < M and 0 <= sh < H:
if box[sh][sr][sc] == 0 and box[sh][sr][sc] != -1:
box[sh][sr][sc] = box[current_h][current_r][current_c] + 1
queue.append((sh, sr, sc))
M, N, H = map(int, input().split())
box = [[list(map(int, input().split())) for _ in range(N)] for _ in range(H)]
queue = deque([])
# ๋ถ์๋๋จ, ์ ์๋
dh, dr, dc= [0, 0, 0, 0, -1, 1], [-1, 0, 0, 1, 0, 0], [0, -1, 1, 0, 0, 0]
answer = 0
# queue์๋ค ์์ ์ ๋ค ๋ฃ๊ธฐ
for h in range(H):
for r in range(N):
for c in range(M):
if box[h][r][c] == 1:
queue.append((h, r, c))
bfs(queue)
flag = True
for h in range(H):
if flag == False:
break
for r in range(N):
if flag == False:
break
for c in range(M):
if box[h][r][c] == 0:
flag = False
break
answer = max(answer, max(box[h][r]))
if flag == False:
print(-1)
else:
print(answer -1)
'์๊ณ ๋ฆฌ์ฆ > DFS BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 1520 ๋ด๋ฆฌ๋ง๊ธธ (0) | 2023.02.15 |
---|---|
[Python] ๋ฐฑ์ค 24482 ์๊ณ ๋ฆฌ์ฆ ์์ (0) | 2023.02.14 |
[Python] ๋ฐฑ์ค 7576 ํ ๋งํ (0) | 2023.02.13 |
[Python] ๋ฐฑ์ค 24481 ์๊ณ ๋ฆฌ์ฆ ์์ DFS (์ฌ๊ท!!!) (0) | 2023.02.11 |
[Python] ๋ฐฑ์ค 2644 ์ด์๊ณ์ฐ (0) | 2023.02.09 |