ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋น์ฐ์ ๋์ด๊ฐ ์ฃผ์ด์ง ๋, 1๋ ์ด ์ง๋ ๋๋ง๋ค ๋ฐ๋ค์ ์ธ์ ํ ์๋งํผ ๋น์ฐ์ด ๋ น์์ ์์ด์ง๋ค. ์ด๋ ๋น์ฐ์ ์์ญ์ด 2๊ฐ ์ด์์ด ๋๋ ์ต์์ ์๊ฐ(๋ )์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ BFS๋ฅผ ํตํด ์์ญ์ ํ์ํจ๊ณผ ๋์์, ๊ฐ ๋นํ๊ฐ ๋ฐ๋ค์ ์ธ์ ํ๊ณ ์๋ ์๋ฅผ ์นด์ดํธํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
- BFS๋ฅผ ํตํด, ๋นํ์ธ ๋ถ๋ถ๋ถํฐ ํ์์ ์์ํ๋ค.
- ๋นํ ์ฃผ์๊ฐ ๋ฐ๋ค๋ผ๋ฉด, ๋์ ๋๋ฆฌ๋ฅผ ํตํด ํด๋น ์ง์ ์ ์นด์ดํธํ๋ค.
- BFS ํ์ ํ์, ํ์ ๊ฐ๋ฅํ ์์ญ (๋นํ์ ์์ญ)์ด 2๊ฐ ์ด์์ด๋ผ๋ฉด, ์ฆ์ ์ค๋จํ๊ณ ๋ฐ๋ณต ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ๋นํ๊ฐ ํ๋๋ ์๋ค๋ฉด, 0์ ์ถ๋ ฅํ๊ณ ํ์์ ์ข ๋ฃํ๋ค.
- ๋นํ๊ฐ ๋จ์ ์๊ณ , ์์ญ์ด 2๊ฐ ์ด์์ด ์๋๋ผ๋ฉด ์นด์ดํธํ ๋์ ๋๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋นํ๋ฅผ ๋ น์ธ๋ค.
- ์์ ๊ณผ์ ์ ๋นํ๊ฐ ์๊ฑฐ๋, ์์ญ์ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque, defaultdict
def visitable(x, y):
return 0 <= x < n and 0 <= y < m and not visited[x][y]
def bfs(start):
ret = defaultdict(int)
q = deque([start])
dirs = ((0, 1), (0, -1), (-1, 0), (1, 0))
while q:
x, y = q.popleft()
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y):
# ์ฃผ๋ณ์ด ๋ฐ๋ค์ธ ๊ฒฝ์ฐ, ๋ฐ๋ค์ ์๋ฅผ ์นด์ดํธ
if graph[next_x][next_y] == 0:
ret[(x, y)] += 1
# 0์ด ์๋๊ณ ๋นํ์ธ ๊ฒฝ์ฐ ํ์์ ์ํด ์ถ๊ฐ
else:
visited[next_x][next_y] = True
q.append((next_x, next_y))
return ret
if __name__ == '__main__':
n, m = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
time = 0
while True:
visited = [[False] * m for _ in range(n)]
iceberg = 0
for i in range(n):
for j in range(m):
if graph[i][j] != 0 and not visited[i][j]:
visited[i][j] = True
ice = bfs([i, j])
iceberg += 1
# ๋น์ฐ์ด 2๊ฐ ์ด์์ด๋ผ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ
if iceberg > 1:
print(time)
exit(0)
# ๋น์ฐ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ, ์ค๋จ.
if iceberg == 0:
time = 0
break
# ์ฃผ๋ณ์ ๋ฐ๋ค ์๋งํผ ๋นํ๋ฅผ ๋
น์.
for (i, j), cnt in ice.items():
graph[i][j] = 0 if graph[i][j] < cnt else graph[i][j] - cnt
time += 1
print(time)
์ฒ์์ ํ ๋๋ ํ๋๋ฅผ ํ์ํ๋ฉด์ ๋นํ๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๋ น์๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๋ฉด ์์ ์ ๋ ฅ 1์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ์์ญ์ ์๋ฅผ ํ์ธํ๋ ๊ฒธ, ๋นํ๋ฅผ ๋ น์ผ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์นด์ดํธํ์ฌ์ผ ํ๋ค.๐
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 3015 ์ค์์์ค ์ฌ๊ฒฐํฉ (0) | 2020.10.03 |
---|---|
๋ฐฑ์ค: 9935 ๋ฌธ์์ด ํญ๋ฐ (0) | 2020.10.03 |
๋ฐฑ์ค: 18405 ๊ฒฝ์์ ๊ฐ์ผ (0) | 2020.10.02 |
๋ฐฑ์ค: 2343 ๊ธฐํ ๋ ์จ (0) | 2020.10.01 |
๋ฐฑ์ค: 5014 ์คํํธ๋งํฌ (0) | 2020.10.01 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ