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

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

by chjcoder 2023. 8. 2.

๐ŸŽˆ๋ฌธ์ œ

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

 

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

1. ์ธ์ ‘ํ•œ ํ† ๋งˆํ† ๊ฐ€ ์ต๊ฒŒ ๋งŒ๋“œ๋ฏ€๋กœ bfs๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ•จ

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

 

 

 

๐Ÿ’ป์ฝ”๋“œ

# 7576 ํ† ๋งˆํ† 

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()   # ํ ์„ค์ •

# ํƒ์ƒ‰ ์‹œ์ž‘
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)