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