๋ฌธ์
https://www.acmicpc.net/problem/7576
๋ด ๋ฌธ์ ํ์ด
import sys, copy
m, n = map(int, sys.stdin.readline().split())
storage = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
queue = []
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
countCheck = copy.deepcopy(storage)
result = 0
zero = False
def bfs(count):
index = 0
while len(queue) > index:
x, y, n_count = queue[index][0], queue[index][1], queue[index][2]
index += 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= m: continue
if storage[nx][ny] == 0:
storage[nx][ny] = 1
countCheck[nx][ny] = n_count+1
queue.append((nx, ny, n_count+1))
for i in range(n):
for j in range(m):
if storage[i][j] == 1:
queue.append((i, j, 0))
if storage[i][j] == 0:
zero = True
if zero == False:
print(0)
else:
bfs(0)
for i in range(n):
if 0 in storage[i]:
result = -1
break
result = max(result, max(countCheck[i]))
print(result)
๐ BFS ๋ฌธ์ ๋ก, ๋ชจ๋ ์ต์ ํ ๋งํ ๋ค์ ์์์ ์ผ๋ก ๋์์ ํ์์ ์งํํด์ฃผ๋๊ฒ ํฌ์ธํธ!
- ์ฃผ์ด์ง ์ฐฝ๊ณ ์ ๋ชจ๋ ์๋ฆฌ๋ฅผ ๋๋ฉฐ 1์ด ์๋ ์๋ฆฌ๋ queue์ ๋ฃ์ด์ฃผ์๊ณ ,
์ต์ ํ ๋งํ ๋ค์ ์๋ฆฌ๊ฐ ์ ์ฅ๋ queue๋ฅผ ๊ฐ์ง๊ณ bfs ํจ์๋ฅผ ๋๋ ธ๋ค. - bfs ํจ์๋ก๋ queue์ ์ ์ฅ๋ ํ ๋งํ ๋ค์ ์ํ์ข์ฐ๋ฅผ ํ์ํ๊ณ ,
0์ ๋ฐ๊ฒฌํ๋ฉด ํด๋น ํ ๋งํ ๋ฅผ 1๋ก ๋ฐ๊พธ์ด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋ฒ ํ ๋งํ ๋ฅผ ์ตํ ๋๋ง๋ค
count์ ์ฆ๊ฐ์์ผ์ฃผ์ด์ countCheck ๋ฆฌ์คํธ์ ๋์ ํ์ฌ ๊ธฐ๋กํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด countCheck์ ์ต๋๊ฐ์ ๊ตฌํ์ฌ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๊ฒ ํ๋ค.
(์ ๋ฒ์ swift๋ก ํ์๋ ํ์ด๐์ ์ ์ฌํ ๊ฒ ๊ฐ์์ ์์ธํ ์ค๋ช ์ ์๋ตํ๊ฒ ๋ค.
https://seolhee2750.tistory.com/126)
๐ก ํผ๋๋ฐฑ
- ์ ํ์ ์ธ bfs ๋ฌธ์ ๋ผ ์ฝ๊ฒ ํ ์ ์์๋ค.
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ์์ด BOJ #11053 (0) | 2022.01.30 |
---|---|
[Python Algorithm] ์ฌ์ ๊ฐ์ BOJ #4963 (0) | 2022.01.30 |
[Python Algorithm] ์ฐ๊ตฌ์ BOJ #14502 (0) | 2022.01.30 |
[Python Algorithm] ์ฐ๊ฒฐ ์์์ ๊ฐ์ BOJ #11724 (0) | 2022.01.29 |
[Python Algorithm] ๋ฐ์ด๋ฌ์ค BOJ #2606 (0) | 2022.01.28 |
๋๊ธ