ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
์ต์ ํ ๋งํ ์ ์ ์ต์ ํ ๋งํ ๊ฐ ์ธ์ ํด์๋ค๋ฉด ์, ํ, ์ข, ์ฐ๋ก ํ ์นธ์ฉ ์ํฅ์ ๋ฐ์ ํ ๋งํ ๊ฐ ์ต๊ฒ ๋๋ค. ์์์ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต๋๋ฐ ๊ฑธ๋ฆฌ๋ ๋ ์ง๋ฅผ ๊ณ์ฐํ์ฌ ๋ฐํํ๋ฉด ๋๋ค.
์์ ๊ทธ๋ฆผ์ ์์ ์ ๋ ฅ 1์ด๋ค. ์์ ์ ๋ ฅ 1์ ๊ฒฝ์ฐ ํ ๋งํ ๊ฐ ์ต๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ 8์ผ์ด ์์๋๋ค. ์ด๋ ์ฐ์ธก ํ๋จ์ ์๋ ์ต์ ํ ๋งํ ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋ฃจ๊ฐ ์ง๋จ์ ๋ฐ๋ผ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ ๋งํ ๋ค์ด ์ต๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋จ์ํ ์, ํ, ์ข, ์ฐ๋ฅผ ํ์ํ๋ ๊ฒ์ด ์๋ ๋์ผํ ๋ ์ ์ํฅ์ ๋ฐ์ ๊ฒ์ธ์ง ํ๋จํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < n and 0 <= y < m and not graph[x][y]
def bfs():
cnt = -1
while q:
cnt += 1
for _ in range(len(q)):
cur_x, cur_y = q.popleft()
for x, y in dirs:
next_x, next_y = x + cur_x, y + cur_y
if visitable(next_x, next_y):
graph[next_x][next_y] = 1
q.append([next_x, next_y])
unripe = [True for tomatoes in graph if 0 in tomatoes]
return -1 if unripe else cnt
if __name__ == "__main__":
m, n = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
q = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
q.append([i, j])
print(bfs())
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๋ค๋ฉด, ํ์ฌ ํ์ ์๋ ํ ๋งํ ๋ค์ ๋ชจ๋ ์ฒ๋ฆฌํ์ฌ์ผ ํ๋ฃจ์ ์ต์ ์ ์๋ ํ ๋งํ ๋ค์ด ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ทธ๋ํ ๋ฌธ์ ๋ค๊ณผ ๋ฌ๋ฆฌ, 2์ค ๋ฐ๋ณต๋ฌธ์ ํตํด ์ฒ๋ฆฌํด์ฃผ์ด์ผํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1707 ์ด๋ถ ๊ทธ๋ํ (0) | 2020.07.22 |
---|---|
๋ฐฑ์ค: 7526 ๋์ดํธ์ ์ด๋ (0) | 2020.07.22 |
๋ฐฑ์ค: 2178 ๋ฏธ๋ก ํ์ (0) | 2020.07.21 |
๋ฐฑ์ค: 4963 ์ฌ์ ๊ฐ์ (0) | 2020.07.21 |
๋ฐฑ์ค: 2667 ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (0) | 2020.07.21 |