๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 7576_ํ† ๋งˆํ† 

๋ฟŒ์•ผ._. 2022. 3. 21. 14:00

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/7576)

<ํ† ๋งˆํ† >

๋ฌธ์ œ 

 

์ฒ ์ˆ˜์˜ ํ† ๋งˆํ†  ๋†์žฅ์—์„œ๋Š” ํ† ๋งˆํ† ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ† ๋งˆํ† ๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฒฉ์ž ๋ชจ์–‘ ์ƒ์ž์˜ ์นธ์— ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์„œ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•œ๋‹ค. 

์ฐฝ๊ณ ์— ๋ณด๊ด€๋˜๋Š” ํ† ๋งˆํ† ๋“ค ์ค‘์—๋Š” ์ž˜ ์ต์€ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ, ์•„์ง ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ณด๊ด€ ํ›„ ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๋ฉด, ์ต์€ ํ† ๋งˆํ† ๋“ค์˜ ์ธ์ ‘ํ•œ ๊ณณ์— ์žˆ๋Š” ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์€ ์ต์€ ํ† ๋งˆํ† ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ต๊ฒŒ ๋œ๋‹ค. ํ•˜๋‚˜์˜ ํ† ๋งˆํ† ์˜ ์ธ์ ‘ํ•œ ๊ณณ์€ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•ž, ๋’ค ๋„ค ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€๊ฐ์„  ๋ฐฉํ–ฅ์— ์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์—๊ฒŒ๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ๋ชปํ•˜๋ฉฐ, ํ† ๋งˆํ† ๊ฐ€ ํ˜ผ์ž ์ €์ ˆ๋กœ ์ต๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ฐฝ๊ณ ์— ๋ณด๊ด€๋œ ํ† ๋งˆํ† ๋“ค์ด ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ๋‹ค ์ต๊ฒŒ ๋˜๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์–ด ํ•œ๋‹ค.
ํ† ๋งˆํ† ๋ฅผ ์ฐฝ๊ณ ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒฉ์ž๋ชจ์–‘์˜ ์ƒ์ž๋“ค์˜ ํฌ๊ธฐ์™€ ์ต์€ ํ† ๋งˆํ† ๋“ค๊ณผ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฉฐ์น ์ด ์ง€๋‚˜๋ฉด ํ† ๋งˆํ† ๋“ค์ด ๋ชจ๋‘ ์ต๋Š”์ง€, ๊ทธ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ƒ์ž์˜ ์ผ๋ถ€ ์นธ์—๋Š” ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ž…๋ ฅ

 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M, N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M, N ≤ 1,000์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฆ‰, ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ƒ์ž์— ๋‹ด๊ธด ํ† ๋งˆํ† ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํ•˜๋‚˜์˜ ์ค„์—๋Š” ์ƒ์ž ๊ฐ€๋กœ์ค„์— ๋“ค์–ด์žˆ๋Š” ํ† ๋งˆํ† ์˜ ์ƒํƒœ๊ฐ€ M๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ •์ˆ˜ 1์€ ์ต์€ ํ† ๋งˆํ† , ์ •์ˆ˜ 0์€ ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† , ์ •์ˆ˜ -1์€ ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
ํ† ๋งˆํ† ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

์—ฌ๋Ÿฌ๋ถ„์€ ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋‚ ์งœ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ์ €์žฅ๋  ๋•Œ๋ถ€ํ„ฐ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์–ด์žˆ๋Š” ์ƒํƒœ์ด๋ฉด 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ณ , ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€๋Š” ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution

import sys
from collections import deque

def bfs(graph, queue, visited, depth):
    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 x>=0 and x<len(graph) and y>=0 and y<len(graph[0]): # ์ƒ์ž ๋ฒ”์œ„์— ๋“ ๋‹ค๋ฉด
                if visited[x][y]==0: # ๋ฐฉ๋ฌธ x, ํ† ๋งˆํ†  o, ์•ˆ์ต์Œ
                    queue.append([x,y])
                    visited[x][y]=1 # ๋ฐฉ๋ฌธ
                    depth[x][y]=depth[temp[0]][temp[1]]+1 # ์ผ์ˆ˜ ๊ตฌํ•˜๊ธฐ

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

    graph=[]
    answer=0 # ์ตœ์†Œ ๋‚ ์งœ
    for i in range(n):
        temp=list(map(int ,sys.stdin.readline().split()))
        graph.append(temp)

    visited=[[0]*m for i in range(n)] # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    depth=[[0]*m for i in range(n)] # ์ตœ์†Œ ์ผ์ˆ˜ ๊ตฌํ•˜๊ธฐ

    queue=deque([])
    for i in range(n):
        for j in range(m):
            if visited[i][j]==0 and graph[i][j]==1: # ๋ฐฉ๋ฌธ x, ์ต์€ ํ† ๋งˆํ† 
                queue.append([i,j])
                visited[i][j]=1
            if graph[i][j]==-1: # ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์Œ
                visited[i][j]=1

    bfs(graph, queue, visited, depth)

    flag=0
    for i in range(n):
        for j in range(m):
            if visited[i][j]==0: # ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ
                flag=1
                break
            else:
                if answer<depth[i][j]: # ์ตœ์†Œ ์ผ์ˆ˜ ๊ตฌํ•˜๊ธฐ
                    answer=depth[i][j]

    if flag==1:
        print(-1)
    else:
        print(answer)

 

  • bfs (ํ† ๋งˆํ†  ์ •๋ณด,  queue , ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ list, day)
    : dx, dy = ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰
    : queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต -> ์ œ์ผ ์ฒ˜์Œ ๊ฐ’์„ pop -> ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํ™•์ธํ•˜์—ฌ ํ† ๋งˆํ†  ์ƒ์ž ๋ฒ”์œ„์— ์†ํ•˜๋ฉด -> ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด -> queue์— ์ถ”๊ฐ€, ๋ฐฉ๋ฌธ o, ์ด๋™ํ•  ์œ„์น˜์˜ depth = ํ˜„์žฌ ์œ„์น˜์˜ depth +1 
  • main
    : m, n ์ž…๋ ฅ
    : ํ† ๋งˆํ†  ์ •๋ณด ์ž…๋ ฅ
    : graph = ํ† ๋งˆํ†  ์ •๋ณด
     answer= ์ตœ์†Œ ๋‚ ์งœ
     visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ 
     depth = ์ตœ์†Œ ์ผ์ˆ˜ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ day ์ €์žฅ
    : ํ† ๋งˆํ†  ์ •๋ณด ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ต์€ ํ† ๋งˆํ† ๋ฅผ queue์— ์ถ”๊ฐ€ ๋ฐ ๋ฐฉ๋ฌธ o
    : ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ๊ณณ์€ bfs ํ•จ์ˆ˜์—์„œ ์˜ํ–ฅ๋ฐ›์ง€ ์•Š๋„๋ก visited๋ฅผ 1๋กœ ์„ค์ •
    : bfs ํ•จ์ˆ˜ ํ˜ธ์ถœ
    : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ list๋ฅผ ์ „์ฒด ํƒ์ƒ‰ํ•˜์—ฌ 0์ด ์กด์žฌํ•˜๋ฉด = ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ -> -1 ์ถœ๋ ฅ
     0์ด ์—†๋‹ค๋ฉด depth ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ ์ฐพ์•„์„œ ์ถœ๋ ฅ = ์ตœ์†Œ ์ผ์ˆ˜

์ฒ˜์Œ ๊ณ ๋ฏผํ–ˆ๋˜ ๊ฒƒ์€ ์•ˆ ์ต์€ ํ† ๋งˆํ† ์™€ ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ๊ฒƒ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค. ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์นธ์— ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๋Š” ์•ˆ ์ต์€ ํ† ๋งˆํ† ๋Š” ์ต์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ† ๋งˆํ† ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” visited๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํ† ๋งˆํ† ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์นธ์€ ๋ฏธ๋ฆฌ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ o๋กœ ๋ฐ”๊ฟ” bfs๋ฅผ ๋Œ ๋•Œ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ™•์ธํ•˜์—ฌ ํƒ์ƒ‰์— ์ง€์žฅ์„ ์ฃผ์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

 

๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ต์€ ํ† ๋งˆํ† ๋ฅผ queue์— ๋„ฃ์–ด์ฃผ์–ด bfs ํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค. bfs ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ˜„์žฌ ๊ฐ’์˜ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ์ƒ์ž ๋ฒ”์œ„์— ๋“ ๋‹ค๋ฉด queue์— ์ถ”๊ฐ€ ๋ฐ ๋ฐฉ๋ฌธ o, depth๋ฅผ update ํ•ด์ค€๋‹ค.

 

bfs๊ฐ€ ๋๋‚œ ๋‹ค์Œ visited๋ฅผ ์ „์ฒด ํƒ์ƒ‰ํ•˜์—ฌ 0์ด ์žˆ๋‹ค๋ฉด ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ๋ผ๊ณ  ํ•˜์—ฌ  -1์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์—ˆ๋‹ค๋ฉด depth ์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์ตœ์†Œ ์ผ์ˆ˜ ์ด๋ฏ€๋กœ ๊ทธ ๊ฐ’์„ ์ฐพ์•„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

 

โ“ ์ฒ˜์Œ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ํ›„ ์ƒ๊ฐํ•œ ๊ฒƒ์€ max์™€ count ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€๋‹ค. ์ฒ˜์Œ ์ฝ”๋“œ๋Š” visited์—์„œ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ๊ณผ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ depth์—์„œ max๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ max์™€ count ๋Œ€์‹  ๋น„๊ต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ œ์ถœํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„ ์ดˆ๊ณผ์˜€๋‹ค. 

 

๊ทธ๋‹ค์Œ์€ list ๋Œ€์‹  dequeu๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. dequeu๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pop(0) ๋Œ€์‹  popleft๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 


์ƒ๊ฐ๐Ÿค”

 

์‹œ๊ฐ„ ์ดˆ๊ณผ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ํ†ต๊ณผํ•˜๋Š” ๋‚ ์ด ์—†๋‹ค

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋Š” ์ฃผ์„ ์“ฐ๋‹ค๊ฐ€ ์ฝ”๋“œ ํ•œ ์ค„ ๋‚ ๋ ค์„œ ๋ฐœ์ƒ...๐Ÿ˜ฑ