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

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #2638


๋ฌธ์ œ

Nร—M์˜ ๋ชจ๋ˆˆ์ข…์ด ์œ„์— ์•„์ฃผ ์–‡์€ ์น˜์ฆˆ๊ฐ€ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค. ๋‹จ, N ์€ ์„ธ๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๊ณ , M ์€ ๊ฐ€๋กœ ๊ฒฉ์ž์˜ ์ˆ˜์ด๋‹ค. ์ด ์น˜์ฆˆ๋Š” ๋ƒ‰๋™ ๋ณด๊ด€์„ ํ•ด์•ผ๋งŒ ํ•˜๋Š”๋ฐ ์‹ค๋‚ด์˜จ๋„์— ๋‚ด์–ด๋†“์œผ๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์—ฌ ์ฒœ์ฒœํžˆ ๋…น๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ๋ชจ๋ˆˆ์ข…์ด ๋ชจ์–‘์˜ ์น˜์ฆˆ์—์„œ ๊ฐ ์น˜์ฆˆ ๊ฒฉ์ž(์ž‘ ์€ ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘)์˜ 4๋ณ€ ์ค‘์—์„œ ์ ์–ด๋„ 2๋ณ€ ์ด์ƒ์ด ์‹ค๋‚ด์˜จ๋„์˜ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๊ฒƒ์€ ์ •ํ™•ํžˆ ํ•œ์‹œ๊ฐ„๋งŒ์— ๋…น์•„ ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜ <๊ทธ๋ฆผ 1> ๋ชจ์–‘๊ณผ ๊ฐ™์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๋ผ๋ฉด C๋กœ ํ‘œ์‹œ๋œ ๋ชจ๋“  ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ํ•œ ์‹œ๊ฐ„ ํ›„์— ์‚ฌ๋ผ์ง„๋‹ค.

<๊ทธ๋ฆผ 1> <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์น˜์ฆˆ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ณต๊ฐ„์€ ์น˜์ฆˆ ์™ธ๋ถ€ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€ ๋กœ ์ด ๊ณต๊ฐ„์— ์ ‘์ด‰ํ•œ ์น˜์ฆˆ ๊ฒฉ์ž๋Š” ๋…น์ง€ ์•Š๊ณ  C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋งŒ ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ ์‹œ๊ฐ„ ํ›„, ์ด ๊ณต๊ฐ„์œผ๋กœ ์™ธ๋ถ€๊ณต๊ธฐ๊ฐ€ ์œ ์ž…๋˜๋ฉด <๊ทธ๋ฆผ 3>์—์„œ์™€ ๊ฐ™์ด C๋กœ ํ‘œ์‹œ๋œ ์น˜์ฆˆ ๊ฒฉ์ž๋“ค์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

<๊ทธ๋ฆผ 2>

<๊ทธ๋ฆผ 3> ๋ชจ๋ˆˆ์ข…์ด์˜ ๋งจ ๊ฐ€์žฅ์ž๋ฆฌ์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“์ด์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•œ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ N, M (5 โ‰ค N, M โ‰ค 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ชจ๋ˆˆ์ข…์ด ์œ„์˜ ๊ฒฉ์ž์— ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์€ 1๋กœ ํ‘œ์‹œ๋˜๊ณ , ์น˜์ฆˆ๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์€ 0์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ๋˜ํ•œ, ๊ฐ 0๊ณผ 1์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.


์ถœ๋ ฅ

์ถœ๋ ฅ์œผ๋กœ๋Š” ์ฃผ์–ด์ง„ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ์ •์ˆ˜๋กœ ์ฒซ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

8 9
0 0 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0
0 0 0 1 1 0 1 1 0
0 0 1 1 1 1 1 1 0
0 0 1 1 1 1 1 0 0
0 0 1 1 0 1 1 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0


์ถœ๋ ฅ

4


My Sol

import sys
input = sys.stdin.readline
from collections import deque

def bfs(ni, nj):
    global removeQ, space
    Q = deque()
    Q.append((ni, nj))
    while Q:
        ni, nj = Q.popleft()
        if visit[ni][nj]: continue
        visit[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 mat[si][sj]:
                space[si][sj] += 1
                if space[si][sj] == 2:
                    removeQ.append((si, sj))
            else:
                Q.append((si, sj))


I, J = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
space = [[0]*J for _ in range(I)]
visit = [[0]*J for _ in range(I)]

removeQ = deque()
bfs(0, 0)
time = 0
while removeQ:
    for _ in range(len(removeQ)):
        ni, nj = removeQ.popleft()
        bfs(ni, nj)
    time += 1

print(time)

์˜ˆ์ „์— ํ’€์—ˆ๋˜ ์น˜์ฆˆ ๋ฌธ์ œ์™€ ์–ผ์ถ” ๋น„์Šทํ•œ ๋Š๋‚Œ์ด์—ˆ๋‹ค. ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ํ•ญ์ƒ 0์œผ๋กœ ๋น„์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— (0, 0) ์œ„์น˜๋ถ€ํ„ฐ bfs๋ฅผ ์‹ค์‹œํ•ด, 1์ธ ๊ฐ’์— ๋ถ€๋”ชํžŒ๋‹ค๋ฉด ํ•ด๋‹น ์ขŒํ‘œ์˜ space, ์ฆ‰ ํ•ด๋‹น ์ขŒํ‘œ์˜ ์‹œ๊ฐ์—์„œ ๊ณต๋ฐฑ์„ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋งŒ์•ฝ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ 2๊ฐ€ ๋œ๋‹ค๋ฉด, 2๊ฐœ์˜ ๋ณ€์—์„œ ๊ณต๋ฐฑ์„ ๋งˆ์ฃผํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ œ๊ฑฐ๋Œ€์ƒ์ด๋‹ค. removeQ์— ์ขŒํ‘œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

bfs ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ธฐ์ค€์ ์„ ์‹œ์ž‘ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ bfs์ด๋ฏ€๋กœ ๋ณ„๋„์˜ Q์— 0์˜ ์ขŒํ‘œ์ด๋ฉด์„œ visit์ด ์•„๋‹ˆ์–ด์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ขŒํ‘œ๋“ค์„ ๋ชจ์•„๊ฐ€๋ฉด์„œ visit์„ ์ฒดํฌํ•ด์ค€๋‹ค.

while๋ฌธ์€ removeQ์— ์ œ๊ฑฐ๋Œ€์ƒ์ด ์กด์žฌํ•˜๋Š”๋™์•ˆ ๊ณ„์† ์‹ค์‹œํ•˜๋Š”๋ฐ, ์ œ๊ฑฐ๋Œ€์ƒ์„ ์ œ๊ฑฐํ•จ๊ณผ ๋™์‹œ์— bfs๋ฅผ ๋Œ๋ ค์„œ ํ•ด๋‹น ์ œ๊ฑฐ๋กœ ์น˜์ฆˆ ๋‚ด๋ถ€์— ๊ณต๊ธฐ์ธต์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ๊ณต๊ฐ„๋„ bfs๋ฅผ ๋Œ๋ ค ๋‹ค์Œ time์˜ ์ œ๊ฑฐ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ์ขŒํ‘œ๋ฅผ visitํ•˜์—ฌ removeQ๋ฅผ ๋” ์ฑ„์šธ ์ˆ˜ ์—†์–ด ์ขŒํ‘œ๊ฐ€ ์—†์–ด์ง€๋ฉด while๋ฌธ์€ ์ข…๋ฃŒ๋œ๋‹ค.


๊ฒฐ๊ณผ

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

์ฒ˜์Œ์— ๋‚ด๋ถ€ ๊ณต๊ธฐ์ธต์„ ๊ณ ๋ คํ•ด ํ’€์ง€ ์•Š์•„์„œ ๊ณ„์† ํ‹€๋ ธ๋Š”๋ฐ, ๊ทธ ์ด์œ ์„ ์•Œ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. ์ œ๊ฑฐํ•œ ์น˜์ฆˆ๋งˆ๋‹ค bfs๋กœ ํ™•์ธํ•˜์—ฌ ๊ณต๊ธฐ์ธต์„ ๊ณ ๋ คํ•ด ์ œ๊ฑฐ ๋Œ€์ƒ์— ํฌํ•จ์‹œ์ผœ์ค€๋‹ค.

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