[BOJ][๐ก5][๋ฐฑ์ค#02636] ์น์ฆ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์๋ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง ์ฌ๊ฐํ ๋ชจ์์ ํ์ด ์๊ณ , ๊ทธ ์์ ์์ ์น์ฆ(ํ์์ผ๋ก ํ์๋ ๋ถ๋ถ)๊ฐ ๋์ฌ ์๋ค. ํ์ ๊ฐ์ฅ์๋ฆฌ(<๊ทธ๋ฆผ 1>์์ ๋ค๋ชจ ์นธ์ X์น ๋ถ๋ถ)์๋ ์น์ฆ๊ฐ ๋์ฌ ์์ง ์์ผ๋ฉฐ ์น์ฆ์๋ ํ๋ ์ด์์ ๊ตฌ๋ฉ์ด ์์ ์ ์๋ค. ์ด ์น์ฆ๋ฅผ ๊ณต๊ธฐ ์ค์ ๋์ผ๋ฉด ๋ น๊ฒ ๋๋๋ฐ ๊ณต๊ธฐ์ ์ ์ด๋ ์นธ์ ํ ์๊ฐ์ด ์ง๋๋ฉด ๋ น์ ์์ด์ง๋ค. ์น์ฆ์ ๊ตฌ๋ฉ ์์๋ ๊ณต๊ธฐ๊ฐ ์์ง๋ง ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๊ฐ ๋ น์์ ๊ตฌ๋ฉ์ด ์ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์์ผ๋ก ๊ณต๊ธฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค. <๊ทธ๋ฆผ 1>์ ๊ฒฝ์ฐ, ์น์ฆ์ ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๋ ๋ น์ง ์๊ณ โcโ๋ก ํ์๋ ๋ถ๋ถ๋ง ํ ์๊ฐ ํ์ ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ๋๋ค.
<๊ทธ๋ฆผ 1> ์๋ ์น์ฆ ๋ชจ์ ๋ค์ ํ ์๊ฐ ํ์๋ <๊ทธ๋ฆผ 2>์์ โcโ๋ก ํ์๋ ๋ถ๋ถ์ด ๋ น์ ์์ด์ ธ์ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ๋๋ค.
<๊ทธ๋ฆผ 2> ํ ์๊ฐ ํ์ ์น์ฆ ๋ชจ์
<๊ทธ๋ฆผ 3> ๋ ์๊ฐ ํ์ ์น์ฆ ๋ชจ์ <๊ทธ๋ฆผ 3>์ ์๋ ์น์ฆ์ ๋ ์๊ฐ ํ ๋ชจ์์ ๋ํ๋ด๊ณ ์์ผ๋ฉฐ, ๋จ์ ์กฐ๊ฐ๋ค์ ํ ์๊ฐ์ด ๋ ์ง๋๋ฉด ๋ชจ๋ย ๋ น์ ์์ด์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฒ์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ๋ ์ธ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ์ด ์น์ฆ๊ฐ ๋ น๋ ๊ณผ์ ์์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ง ์๋ ์๋ค. ์ ๋ ฅ์ผ๋ก ์ฌ๊ฐํ ๋ชจ์์ ํ์ ํฌ๊ธฐ์ ํ ์กฐ๊ฐ์ ์น์ฆ๊ฐ ํ ์์ ์ฃผ์ด์ก์ ๋, ๊ณต๊ธฐ ์ค์์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ฌ๊ฐํ ๋ชจ์ ํ์ ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๊ฐ ์์ ์ ์๋ก ์ฃผ์ด์ง๋ค. ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๋ ์ต๋ 100์ด๋ค. ํ์ ๊ฐ ๊ฐ๋ก์ค์ ๋ชจ์์ด ์ ์ค๋ถํฐ ์ฐจ๋ก๋ก ๋์งธ ์ค๋ถํฐ ๋ง์ง๋ง ์ค๊น์ง ์ฃผ์ด์ง๋ค. ์น์ฆ๊ฐ ์๋ ์นธ์ 0, ์น์ฆ๊ฐ ์๋ ์นธ์ 1๋ก ์ฃผ์ด์ง๋ฉฐ ๊ฐ ์ซ์ ์ฌ์ด์๋ ๋น์นธ์ด ํ๋์ฉ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค์๋ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
13 12
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0
0 1 1 1 0 0 0 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0 0 0
0 1 1 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
์ถ๋ ฅ
3
5
My Sol
import sys
input = sys.stdin.readline
I, J = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
space = [[0]*J for _ in range(I)]
RemoveSet = set()
RemoveSet.add((0, 0))
time = 0
lastcnt = 0
while RemoveSet:
lastcnt = len(RemoveSet)
Q = RemoveSet
for i, j in RemoveSet:
mat[i][j] = 0
RemoveSet = set()
while Q:
ni, nj = Q.pop()
if space[ni][nj]: continue
space[ni][nj] = 1
for di, dj in ((-1,0),(1,0),(0,-1),(0,1)):
si, sj = ni+di, nj+dj
if not (0<=si<I and 0<=sj<J): continue
if space[si][sj]: continue
if mat[si][sj]:
RemoveSet.add((si, sj))
continue
Q.add((si, sj))
time += 1
print(time-1)
print(0 if time==1 else lastcnt)
์ต์ด ๋ฌด์กฐ๊ฑด ๊ณต๋ฐฑ์ธ 0ํ 0์ด๋ถํฐ BFS๋ฅผ ์ด์ฉํด ๊ณต๋ฐฑ์ ๋ชจ๋ ๋ถ๋ถ์ ์ฒดํฌํด์ค๋ค. ๊ฐ์ฅ์๋ฆฌ๊ฐ ๋ชจ๋ ๊ณต๋ฐฑ์ด๋ฏ๋ก (0, 0)๋ถํฐ ์์ํ๋ฉด ๊ฐ์ฅ์๋ฆฌ๋ฅผ ๋๋ฌ ๊ณต๊ธฐ์ ์ ์ดํ๋ ๋ชจ๋ ๋ถ๋ถ์ BFS๋ก ์ฒดํฌํ ์ ์๋ค. ์์ญ์ ๋ฒ์ด๋๋ค๋ฉด continueํ๊ณ , ์น์ฆ์ ์ ์ดํ๋ค๋ฉด ํด๋น ์ขํ๋ฅผ RemoveSet์ ์ถ๊ฐํ๋ค. ์ด๋ฅผ ๊ณต๋ฐฑ์ ๋ํ Q๋ฅผ ์ฑ์ฐ๋๋์ ๊ณ์ ์ค์ํ๋ค.
ํ ์ฌ์ดํด์ด ๋๋ฉด, ๊ณต๊ธฐ์ ์ง์ ์ ์ดํ๋ ์น์ฆ์ ์ขํ๊ฐ RemoveSet์ ์ ์ฅ๋๊ณ , ์ด ๊ฐ๊ฐ์ ๋ชจ๋ mat์์ 0์ผ๋ก ์ฒดํฌํ ๋ค, ์ด ์ขํ๋ค์ ๋ค์ Q๋ก ๋ง๋ค์ด space๋ 1๋ก ์ฒดํฌํ๊ณ ํ์์ขํ์ mat์ด 1, ์ฆ ๋ค์ ์น์ฆ์ ์ ์ดํ๋ค๋ฉด ์ ์ด ์ขํ๋ฅผ RemoveSet์ ๋ฃ์ด์ค๋ค. RemoveSet์ด ์๋, ์ฆ ์น์ฆ๊ฐ ์์ด์ง ๋๊น์ง ๋ฐ๋ณตํ๋ฉฐ, RemoveSet์ ํฌ๊ธฐ๋ฅผ ๋งค๋ฒ ๊ตฌํด, RemoveSet์ด ์์ด์ง๊ธฐ ์ง์ ์ RemoveSet์ ํฌ๊ธฐ, ์ฆ ๋ง์ง๋ง์ ์น์ฆ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํด์ค๋ค.
์ฒ์๋ถํฐ ์น์ฆ๊ฐ ์๋ค๋ฉด time์ 0์ด ๋ ๊ฒ์ด๊ณ , (0,0)๋ถํฐ ์์ํ๊ธฐ ์ํด RemoveSet์ (0,0)์ ๋ฃ์ ๊ฒ์ด lastcnt๋ก ์กํ๋ฏ๋ก time-1์ด 0์ด๋ผ๋ฉด lastcnt๋ 0์ ๋ฐํํ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ฉฐ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ