๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
G4 | DFS, ๊ตฌํ
9๊ฐ์์ ์ ํ์ด๋ดค๋ ๋ฌธ์ ์๋๋ฐ, ๊ทธ ๋๋ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํด์ ๊ฒจ์ฐ pypy๋ก ์ ์ถํด์ ํต๊ณผํ๋ค.
์ด๋ฒ์ ์คํฐ๋๋ฅผ ํ๋ค๋ณด๋ ๋ค์ ํ๊ฒ ๋ผ์ ํจ์จ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด python์ผ๋ก๋ ํต๊ณผ๋ฅผ ํ๋ค.
- ๋
น์ด๋ ๋น์ฐ ์ฐพ๊ธฐ
- 2์ฐจ์ ๋ฐฐ์ด ํ๋์ฉ ๋๊ธฐ -> ๋น์ฐ์ ๋ฐ๋ก ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋๊ธฐ ์ DFS
- ๋นํ ๋ฉ์ด๋ฆฌ๊ฐ ํ๋์ธ์ง ์ฌ๋ฌ๊ฐ์ธ์ง ํ๋ณ
- DFS -> ๋น์ฐ ๋ฆฌ์คํธ์ ๊ธธ์ด์ ๋ น์ผ ๋ ์ ํํ ๋น์ฐ์ ์์ ์ฐจ์ด๋ก ๋ฐ๋ก ๊ณ์ฐ
๐ป์์ค ์ฝ๋
import sys
from _collections import defaultdict
input = sys.stdin.readline
def melt():
melting_area = {} # ๋
น์ผ ๊ณณ
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
visited = [[0] * M for _ in range(N)] # ๋ฐฉ๋ฌธ
stack = []
stack.append(iceberg[0])
selected_iceberg = 0 # ์ ํ๋ ๋น์ฐ๋ค ( ๋์ค์ ์ ์ฒด ๋น์ฐ๊ณผ ๋น๊ตํด์ ํ๋ฉ์ด๋ฆฌ์ธ์ง ํ์ธ )
visited[iceberg[0][0]][iceberg[0][1]] = 1
while stack:
x, y = stack.pop()
selected_iceberg += 1
melting_cnt = 0
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if arctic[nx][ny] and not visited[nx][ny]: # ์์ด ์ก์ง์ด๋ฉด ๋ค์ ํ์
stack.append((nx, ny))
visited[nx][ny] = 1
elif arctic[nx][ny] == 0: # ์์ด ๋ฐ๋ค์ด๋ฉด ๋
น์ด๋ ์นด์ดํธ
melting_cnt += 1
melting_area[(x, y)] = melting_cnt
# ๋
น์ด๊ธฐ
new_iceberg = [] # ์๋ก์ด ๋น์ฐ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด
for key, value in melting_area.items():
i, j = key
arctic[i][j] = max(0, arctic[i][j] - value)
if arctic[i][j] > 0:
new_iceberg.append((i, j))
return selected_iceberg, new_iceberg
if __name__ == '__main__':
N, M = map(int, input().split())
arctic = [list(map(int, input().split())) for _ in range(N)]
# ๋น์ฐ๋ง ์ฐพ๊ธฐ
iceberg = []
for i in range(N):
for j in range(M):
if arctic[i][j]:
iceberg.append((i, j))
answer = 0 # year
while True:
# ๋
น์ด๊ธฐ
selected_cnt, new_iceberg = melt()
# ํ๋ฉ์ด๋ฆฌ์ธ์ง
if selected_cnt != len(iceberg):
break
if selected_cnt == 0 or len(new_iceberg) == 0:
answer = 0
break
iceberg = new_iceberg[:]
answer += 1
print(answer)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/2573
2573๋ฒ: ๋น์ฐ
์ฒซ ์ค์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์์ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ N๊ณผ M์ด ํ ๊ฐ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. N๊ณผ M์ 3 ์ด์ 300 ์ดํ์ด๋ค. ๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์
www.acmicpc.net
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 18428. ๊ฐ์ ํผํ๊ธฐ (0) | 2020.11.28 |
---|---|
[python] ๋ฐฑ์ค - 1916. ์ต์๋น์ฉ ๊ตฌํ๊ธฐ (0) | 2020.11.27 |
[python] ๋ฐฑ์ค - 2493. ํ (0) | 2020.11.25 |
[python] SWEA - 5986. ์์์ด์ ์ธ ์์ (0) | 2020.11.24 |
[python] ๋ฐฑ์ค - 13458. ์ํ ๊ฐ๋ (์ผ์ฑ SW ์ญ๋ ํ ์คํธ ๊ธฐ์ถ ๋ฌธ์ ) (0) | 2020.11.23 |