[BOJ][๐ŸŸก5][๋ฐฑ์ค€#02636] ์น˜์ฆˆ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #2636


๋ฌธ์ œ

์•„๋ž˜ <๊ทธ๋ฆผ 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์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉฐ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ