[BOJ][๐ก4][๋ฐฑ์ค#02573] ๋น์ฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ง๊ตฌ ์จ๋ํ๋ก ์ธํ์ฌ ๋ถ๊ทน์ ๋น์ฐ์ด ๋ น๊ณ ์๋ค. ๋น์ฐ์ ๊ทธ๋ฆผ 1๊ณผ ๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์ ํ์ํ๋ค๊ณ ํ์. ๋น์ฐ์ ๊ฐ ๋ถ๋ถ๋ณ ๋์ด ์ ๋ณด๋ ๋ฐฐ์ด์ ๊ฐ ์นธ์ ์์ ์ ์๋ก ์ ์ฅ๋๋ค. ๋น์ฐ ์ด์ธ์ ๋ฐ๋ค์ ํด๋น๋๋ ์นธ์๋ 0์ด ์ ์ฅ๋๋ค. ๊ทธ๋ฆผ 1์์ ๋น์นธ์ ๋ชจ๋ 0์ผ๋ก ์ฑ์์ ธ ์๋ค๊ณ ์๊ฐํ๋ค.
ย ย ย ย ย ย ย
ย 2 4 5 3 ย ย
ย 3 ย 2 5 2 ย
ย 7 6 2 4 ย ย
ย ย ย ย ย ย ย
๊ทธ๋ฆผ 1. ํ์ ๊ฐ์๊ฐ 5์ด๊ณ ์ด์ ๊ฐ์๊ฐ 7์ธ 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ฅ๋ ๋น์ฐ์ ๋์ด ์ ๋ณด ๋น์ฐ์ ๋์ด๋ ๋ฐ๋ท๋ฌผ์ ๋ง์ด ์ ํด์๋ ๋ถ๋ถ์์ ๋ ๋นจ๋ฆฌ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์์ ๋น์ฐ์ ๊ฐ ๋ถ๋ถ์ ํด๋น๋๋ ์นธ์ ์๋ ๋์ด๋ ์ผ๋ ๋ง๋ค ๊ทธ ์นธ์ ๋์๋จ๋ถ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ 0์ด ์ ์ฅ๋ ์นธ์ ๊ฐ์๋งํผ ์ค์ด๋ ๋ค. ๋จ, ๊ฐ ์นธ์ ์ ์ฅ๋ ๋์ด๋ 0๋ณด๋ค ๋ ์ค์ด๋ค์ง ์๋๋ค. ๋ฐ๋ท๋ฌผ์ ํธ์์ฒ๋ผ ๋น์ฐ์ ๋๋ฌ์ธ์ฌ ์์ ์๋ ์๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ ์ผ๋ ํ์ ๊ทธ๋ฆผ 2์ ๊ฐ์ด ๋ณํ๋๋ค. ๊ทธ๋ฆผ 3์ ๊ทธ๋ฆผ 1์ ๋น์ฐ์ด 2๋ ํ์ ๋ณํ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค. 2์ฐจ์ ๋ฐฐ์ด์์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ๋ถ์ด์๋ ์นธ๋ค์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ๋งํ๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฆผ 2์ ๋น์ฐ์ ํ ๋ฉ์ด๋ฆฌ์ด์ง๋ง, ๊ทธ๋ฆผ 3์ ๋น์ฐ์ ์ธ ๋ฉ์ด๋ฆฌ๋ก ๋ถ๋ฆฌ๋์ด ์๋ค.
ย ย ย ย ย ย ย
ย ย 2 4 1 ย ย
ย 1 ย 1 5 ย ย
ย 5 4 1 2 ย ย
ย ย ย ย ย ย ย
๊ทธ๋ฆผ 2
ย ย ย ย ย ย ย
ย ย ย 3 ย ย ย
ย ย ย ย 4 ย ย
ย 3 2 ย ย ย ย
ย ย ย ย ย ย ย
๊ทธ๋ฆผ 3 ํ ๋ฉ์ด๋ฆฌ์ ๋น์ฐ์ด ์ฃผ์ด์ง ๋, ์ด ๋น์ฐ์ด ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋ )์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๊ทธ๋ฆผ 1์ ๋น์ฐ์ ๋ํด์๋ 2๊ฐ ๋ต์ด๋ค. ๋ง์ผ ์ ๋ถ ๋ค ๋ น์ ๋๊น์ง ๋ ๋ฉ์ด๋ฆฌ ์ด์์ผ๋ก ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ 0์ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ ๊ฐ์์ ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ N๊ณผ M์ด ํ ๊ฐ์ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. N๊ณผ M์ 3 ์ด์ 300 ์ดํ์ด๋ค. ๊ทธ ๋ค์ N๊ฐ์ ์ค์๋ ๊ฐ ์ค๋ง๋ค ๋ฐฐ์ด์ ๊ฐ ํ์ ๋ํ๋ด๋ M๊ฐ์ ์ ์๊ฐ ํ ๊ฐ์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋ค์ด๊ฐ๋ ๊ฐ์ 0 ์ด์ 10 ์ดํ์ด๋ค. ๋ฐฐ์ด์์ ๋น์ฐ์ด ์ฐจ์งํ๋ ์นธ์ ๊ฐ์, ์ฆ, 1 ์ด์์ ์ ์๊ฐ ๋ค์ด๊ฐ๋ ์นธ์ ๊ฐ์๋ 10,000 ๊ฐ ์ดํ์ด๋ค. ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ํ๊ณผ ์ด, ๋ง์ง๋ง ํ๊ณผ ์ด์๋ ํญ์ 0์ผ๋ก ์ฑ์์ง๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ๋น์ฐ์ด ๋ถ๋ฆฌ๋๋ ์ต์ด์ ์๊ฐ(๋ )์ ์ถ๋ ฅํ๋ค. ๋ง์ผ ๋น์ฐ์ด ๋ค ๋ น์ ๋๊น์ง ๋ถ๋ฆฌ๋์ง ์์ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
5 7
0 0 0 0 0 0 0
0 2 4 5 3 0 0
0 3 0 2 5 2 0
0 7 6 2 4 0 0
0 0 0 0 0 0 0
์ถ๋ ฅ
2
My Sol
import sys
input = sys.stdin.readline
def main():
def check_ices():
ices = set()
for i in range(I):
for j in range(J):
if mat[i][j]:
ices.add((i, j))
return ices
def check_is_one():
ii, ij = ices.pop()
ices.add((ii, ij))
linked_ices = check_linked(ii, ij)
return linked_ices == ices
def check_linked(ii, ij):
linked_ices = set()
Q = set()
Q.add((ii, ij))
while Q:
ii, ij = Q.pop()
if (ii, ij) in linked_ices: continue
linked_ices.add((ii, ij))
for di, dj in ((-1,0),(1,0),(0,-1),(0,1)):
si, sj = ii+di, ij+dj
if not (0<=si<I and 0<=sj<J): continue
if not mat[si][sj]: continue
Q.add((si, sj))
return linked_ices
def melt():
target_ices = []
for ii, ij in ices:
melt_cnt = melt_one(ii, ij)
target_ices.append((ii, ij, melt_cnt))
remove_ices = set()
for ii, ij, mcnt in target_ices:
mat[ii][ij] -= mcnt
if mat[ii][ij]: continue
remove_ices.add((ii, ij))
return remove_ices
def melt_one(i, j):
cnt = 0
for di, dj in ((-1,0),(1,0),(0,-1),(0,1)):
si, sj = i+di, j+dj
if not (0<=si<I and 0<=sj<J): continue
if mat[si][sj]: continue
cnt += 1
return cnt if mat[i][j] > cnt else mat[i][j]
I, J = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
ices = check_ices()
if not ices: return 0
year = 0
while True:
if not check_is_one(): return year
year += 1
ices -= melt()
if not ices: return 0
print(main())
BFS ๋๋ DFS๋ฅผ ํ์ฉํ๋ ๋ฌธ์ ์๋ค. ๋๋ BFS๋ฅผ ํ์ฉํ์์ผ๋ฉฐ, 7๋ฌ~8๋ฌ ์ ์ ๋ชป ํ์๋ ๋ฌธ์ ์ฌ์ ์ฌ๋์ ํ ๊ฑด๋ฐ ์ฝ๊ฒ ์ ํ์ด๋ด์ ๊ธฐ์๋ค.
main
ํจ์ ๋ด์์ ์ ๋ ฅ์ ๋ฐ๋๋ค. ๊ฐ๋ก ์ธ๋ก์ ํฌ๊ธฐ I, J์ ํด๋นํ๋ ๋น์ฐ ์ ๋ณด๋ฅผ ๋ด์ ๊ฒฉ์mat
์ ๋ฐ์ ์ ์ฅํ๊ณ , ์ผ์์ด ์๋ ๊ฐ ์ขํ๋ค์ices
๋ผ๋ set์ ์ ์ฅํด์ฃผ์๋ค. ์ด๋ฅผmake_ices
ํจ์๋ฅผ ์ด์ฉํด ๋ถ๋ฆฌํ์๋ค.- ๋ง์ฝ ์ฒ์๋ถํฐ ์ผ์์ด ์๋ค๋ฉด 0์ ๋ฐํํ๋ค.
- ์ฐ๋๋ฅผ ํ์ํ๋ ์งํ
year
๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค. - ๋น์ฐ๋ค์ด ํ๋์ ๋ฉ์ด๋ฆฌ์ธ์ง ์ฒดํฌํ๋ ํจ์
check_is_one
์ ์์ฑํ๋ค. ์ด ํจ์๋ices
set์ ์ผ์ ์ขํ ํ๋๋ฅผ ๋ฝ์mat
์ผ๋ก๋ถํฐ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ขํ๋ค์ BFS๋ฅผ ํ์ฉํด set์ ๋ฃ์ด ๋ฐํํ๋ ํจ์check_linked
๋ก๋ถํฐ ๋ฐํ๋linked_ices
์ ๊ฐ์์ง ์ฌ๋ถ๋ฅผ ๋ฐํํ๋ค. ์ฆ, ์ด๊ฒ์ด ๊ฐ๋ค๋ฉด ๋ชจ๋ ์ผ์์ด ํ๋, ์๋๋ผ๋ฉด ๋ชจ๋ ์ผ์์ด ํ๋๊ฐ ์๋๋ผ๋ ๋ง์ด ๋๋ค. - ๋ง์ฝ
check_is_one
ํจ์๊ฐ False๋ฅผ ๋ฐํํ๋ค๋ฉดmain
ํจ์๋ ํด๋น ์์ ์year
๋ณ์๋ฅผ ๋ฐํํ๋ฉด ๋๊ฒ ๋ค. - ๊ทธ๊ฒ์ด ์๋๋ผ๋ฉด 1๋
์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋น์ฐ์ ๋
น์ด๋
melt
ํจ์๋ฅผ ์์ฑํ๋ค. ๋์์year
์ 1 ๋์ด๋๊ฒ ๋๋ค.melt
ํจ์๋ices
set์ ๊ฐ ์ผ์๋ค์ ์ขํ ์ฃผ๋ณ ์ฌ๋ฐฉ์ ํ์ธํ์ฌ ๋ฐ๋ค์ ๋ง๋ฟ๋ ์ขํ๋ค์ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ค. ์ด ์ ๋ณด๋ฅผ ๋ชจ๋target_ices
์ ๋ฃ์ด ๋์ค์ ํ ๋ฒ์ ์ฒ๋ฆฌํด์ฃผ๊ฒ ๋๋ค. - ์ด ๊ณผ์ ์์ ํ๋์ ์ผ์์ ์ฃผ๋ณ์ ํ์ธํ๋ ํจ์
melt_one
์ ๋ถ๋ฆฌํ์ฌ ์์ฑํ์๋ค. ๋ฐํํ๋ ๊ฐ์ ๋จ์ํ ์ฃผ๋ณ์ ๋ฐ๋ค ๊ฐ์๊ฐ ์๋๋ผ, ์ผ์ ์์ฒด์ ์์ ๋๋์ง๊น์ง ํ์ธํ๋ค. ์๋ํ๋ฉดmelt
ํจ์์์ ์ด๋ฅผ ๋ชจ๋ ์ํํ๋ฉฐ mat์์ ์ผ์์ ๊ฐ์ ์ค์ฌ์ฃผ๋๋ฐ, ํด๋น ์ขํ๋ณด๋ค ๋ ํฐ ๊ฐ์ ๋นผ๊ฒ ๋๋ฉด 0์ด ์๋๊ฒ ๋์ด ์ถํ์ ํ์ธํ๋ ์ ์ฐจ์์ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ด๋ค. melt
ํจ์์์ ์ผ์์ ๋ น์ผ ๋ ๋ น์ 0์ด ๋๋ ์ขํ๋ค์remove_ices
set์ ๋ด์ ๋ฐํํ๋ค.main
ํจ์์์๋ ์ดremove_ices
๋ฅผices
set์์ ๋นผ๊ฒ ๋๋๋ฐ, ์ด๋ices
set์ด ๋น๊ฒ ๋๋ฉด ํ ๋ฒ์melt
๋ก ํ ๋ฉ์ด๋ฆฌ์ ์ผ์์ด ๋ชจ๋ ์์ด์ง๊ฒ ๋๋ ์ํฉ์ด๋ฏ๋ก 0์ ๋ฐํํ๋ค.main
ํจ์์ ๋ฐํ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ