๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2638_์น˜์ฆˆ

๋ฟŒ์•ผ._. 2022. 4. 27. 11:59

Gold IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/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์€ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

 

 

์ถœ๋ ฅ 

 

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

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution (Python)

import sys
from collections import deque

def cheese(arr,queue,visited,cheese_temp):
    cheese_cnt = [[0] * m for i in range(n)] # ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€ ๊ฐœ์ˆ˜
    dx=[-1,1,0,0] # ์ƒํ•˜์ขŒ์šฐ
    dy=[0,0,-1,1]

    while queue:
        temp=queue.popleft()
        for i in range(4):
            x=temp[0]+dx[i]
            y=temp[1]+dy[i]
            if 0<=x<len(arr) and 0<=y<len(arr[0]): # ๋ฒ”์œ„ ์•ˆ
                if arr[x][y]==0 and visited[x][y]==0: # ๊ณต๊ธฐ - ๋ฐฉ๋ฌธ x
                    visited[x][y]=1
                    queue.append([x,y])
                elif arr[x][y]==1: # ์น˜์ฆˆ
                    if visited[x][y]==0: # ๋ฐฉ๋ฌธ x
                        cheese_cnt[x][y]+=1
                        visited[x][y] = 1
                    else: # ์น˜์ฆˆ - ๊ณต๊ธฐ 2๋ณ€ ์ด์ƒ
                        cheese_temp.append([x,y])
    return cheese_temp

if __name__=='__main__':
    n,m=map(int,sys.stdin.readline().split())

    arr=[]
    for i in range(n):
        arr.append(list(map(int,sys.stdin.readline().split())))

    visited=[[0]*m for i in range(n)] # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€

    queue=deque([[0,0]])
    cheese_temp=deque([])
    visited[0][0] = 1

    day=0
    cheese_temp=cheese(arr,queue,visited,cheese_temp)
    for i in cheese_temp: # ์น˜์ฆˆ -> ๊ณต๊ธฐ
        arr[i[0]][i[1]]=0

    while cheese_temp:
        day+=1
        cheese_temp = cheese(arr, cheese_temp, visited, deque([]))
        for i in cheese_temp:
            arr[i[0]][i[1]] = 0

    print(day)

 

์ƒํ•˜์ขŒ์šฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ๊ณต๊ธฐ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ ํ•˜๋ฉฐ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•ด์ค๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์น˜์ฆˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€ +1์„ ํ•ด์ค๋‹ˆ๋‹ค. ์น˜์ฆˆ์ธ๋ฐ ๋ฐฉ๋ฌธํ–ˆ์—ˆ๋‹ค๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€์ด 2 ๋ณ€ ์ด์ƒ์ด๋ผ๋Š” ๋œป์ด๋ฏ€๋กœ ๋…น์„ ์น˜์ฆˆ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

 

 

  • cheese( ์ž…๋ ฅ ์ •๋ณด, queue, ๋ฐฉ๋ฌธ ์—ฌ๋ถ€, ๋…น์„ ์น˜์ฆˆ ์ €์žฅ )
    : cheese_cnt = ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€ ๊ฐœ์ˆ˜ ์ €์žฅ
    : ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทธ ๊ฐ’์ด ๊ณต๊ธฐ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰. ๊ทธ ๊ฐ’์ด ์น˜์ฆˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€์„ +1๋กœ ์ €์žฅ. ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ณณ์ด๋ผ๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ๋ณ€์ด 2 ๋ณ€ ์ด์ƒ์ด๋ผ๋Š” ๋œป์ด๋ฏ€๋กœ ๋…น์„ ์น˜์ฆˆ ๋ชฉ๋ก์— ์ €์žฅ
    : cheese_temp = ๋…น์„ ์น˜์ฆˆ ๋ชฉ๋ก ๋ฐ˜ํ™˜
  • Main
    : ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ ์ž…๋ ฅ
    : arr ์ •๋ณด ์ž…๋ ฅ
    : visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    : cheese_temp = ๋…น์„ ์น˜์ฆˆ ์ €์žฅ ( ํ•œ ๋ฒˆ์— ๋…น์•„์•ผ ํ•˜๋ฏ€๋กœ ๋”ฐ๋กœ ์ €์žฅํ•ด๋’€๋‹ค๊ฐ€ ์น˜์ฆˆ -> ๊ณต๊ธฐ๋กœ ๋ฐ”๊ฟ”์คŒ )
    : ๋…น์„ ์น˜์ฆˆ๊ฐ€ ๋” ์ด์ƒ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์‹œ๊ฐ„ +1 , ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ( ์น˜์ฆˆ -> ๊ณต๊ธฐ ) ๋ณ€ํ™˜
    : ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ •ํ™•ํ•œ ์‹œ๊ฐ„ ์ถœ๋ ฅ

 


์ƒ๊ฐ๐Ÿค”

 

์ด ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ด์„œ ๊ทธ๋Ÿฐ์ง€ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.