๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 7576 ํ† ๋งˆํ†  (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 6. 19.

๐ŸŽˆ๋ฌธ์ œ

https://www.acmicpc.net/problem/7576

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. ์ธ์ ‘ํ•œ ์นธ์„ ์ต๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ๋‹น์—ฐํžˆ bfs๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (bfs๋ž€?)

2. ์ด ๋ฌธ์ œ์™€ ๊ฐ™์ด ์‹œ์ž‘์ ์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๋ฌธ์ œ๋Š” ํ์— ์‹œ์ž‘์ ์„ ๋ชจ๋‘ ๋„ฃ๊ณ  ๋‚˜์„œ bfs๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

 

๐Ÿ’ป์ฝ”๋“œ

from collections import deque

def bfs():
    # ์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ ์„ค์ •
    dx = [0,0,-1,1]
    dy = [1,-1,0,0]

    while deq:
        x,y = deq.popleft() # ํ์—์„œ ์ต์€ ํ† ๋งˆํ†  ์ขŒํ‘œ ๊บผ๋‚ด๊ธฐ      
        for i in range(4):  # ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰ ์‹œ์ž‘
            nx = x + dx[i]
            ny = y + dy[i]
            # graph ๋ฒ—์–ด๋‚œ ์ขŒํ‘œ๋Š” ๋ฌด์‹œ
            if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
                continue
            if graph[nx][ny] == 0:  # ์•ˆ์ต์€ ํ† ๋งˆํ†  ๋ฐœ๊ฒฌ
                graph[nx][ny] = graph[x][y] + 1 # ๋‚ ์งœ+1ํ•จ์œผ๋กœ์จ ์ต์€ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ
                deq.append([nx,ny])

# n: ์„ธ๋กœ(x), m: ๊ฐ€๋กœ(y)
m,n = map(int,input().split())

#graph
graph = []
for i in range(n):
    graph.append(list(map(int,input().split())))


deq = deque()   # ํ ์„ค์ •

# ํƒ์ƒ‰ ์‹œ์ž‘, ์ต์€ ํ† ๋งˆํ†  ์ขŒํ‘œ ํ์— ๋„ฃ์–ด๋†“๊ธฐ
#(0:์•ˆ์ต์€ ํ† ๋งˆํ† , 1:์ต์€ ํ† ๋งˆํ† )
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            deq.append([i,j])

# bfs๋Œ๋ ค์„œ ํ† ๋งˆํ†  ์ตํžˆ๊ธฐ
bfs()

# ์ต์ง€ ๋ชปํ•˜๋Š” ํ† ๋งˆํ†  ํ™•์ธ ๋ฐ ๊ฑธ๋ฆฌ๋Š” ๋‚ ์งœ ํ™•์ธ
all_ripe = True # ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์—ˆ๋Š”์ง€ ํ™•์ธํ•  ๋ณ€์ˆ˜
day = 0 # ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋‚ ์งœ

for i in range(n):
    for j in range(m):
        if graph[i][j] == 0:    # ์•„์ง ์•ˆ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•˜๋ฉด
            all_ripe = False    
            print(-1)
            break
        day = max(day,graph[i][j])
    if not all_ripe:
        break

if all_ripe:    # ํ† ๋งˆํ†  ๋ชจ๋‘ ์ต์—ˆ์œผ๋ฉด
    print(day-1)