๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 7576: ํ† ๋งˆํ†  (Python)

sssbin 2022. 2. 2. 00:03

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

 

7576๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 โ‰ค M,N โ‰ค 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† 

www.acmicpc.net

 

๋ฏธ๋กœ ์ฐพ๊ธฐ๋ž‘ ๋น„์Šทํ•œ ๋ฌธ์ œ๋‹ค

์ฒ˜์Œ์—” BFS๋ฅผ ๋™์‹œ์— ๋Œ๋ ค์•ผ ํ•˜๋‚˜.....? ํ•˜๊ณ  ํ˜ผ์ž ์—„์ฒญ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ

๊ทธ๋ƒฅ ํ์— ์žˆ๋Š” ๊ฑธ ์ „๋ถ€ ๋Œ๋ฆฌ๊ธฐ๋งŒ ํ•ด๋„ ๋œ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์Œ

 

๋งจ ๋งˆ์ง€๋ง‰ ์ขŒํ‘œ์—์„œ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๊ฐ’์€ ์ตœ๋Œ€๊ฐ’!

์ฒ˜์Œ ์‹œ์ž‘์„ 1๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๊ฐ’์€ -1 ํ•ด์ฃผ๊ธฐ!

 

from collections import deque

m, n = map(int, input().split())
tomato = []

for i in range(n):
    tomato.append(list(map(int, input().split())))

queue = deque()
for i in range(n):
    for j in range(m):
        if tomato[i][j] == 1:
            queue.append([i, j])

def bfs():
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]

    while queue:
        x, y = queue.popleft()

        for i in range(4):
            mx = x + dx[i]
            my = y + dy[i]

            if mx < 0 or mx >= n or my < 0 or my >= m:
                continue

            if tomato[mx][my] == 0:
                queue.append([mx, my])
                tomato[mx][my] = tomato[x][y] + 1

bfs()
for i in range(n):
    if 0 in tomato[i]:
        res = -1
        break
    else:
        res = max(map(max, tomato)) - 1

print(res)

 

pypy3๋กœ ์ฑ„์ ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค,,,

 

from collections import deque

m, n = map(int, input().split())
tomato = []

for i in range(n):
    tomato.append(list(map(int, input().split())))

queue = deque()
for i in range(n):
    for j in range(m):
        if tomato[i][j] == 1:
            queue.append([i, j])

def bfs():
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]

    while queue:
        x, y = queue.popleft()

        for i in range(4):
            mx = x + dx[i]
            my = y + dy[i]

            if mx < 0 or mx >= n or my < 0 or my >= m:
                continue

            if tomato[mx][my] == 0:
                queue.append([mx, my])
                tomato[mx][my] = tomato[x][y] + 1

bfs()
res = max(map(max, tomato)) - 1
for i in range(n):
    for j in range(m):
        if tomato[i][j] == 0:
            res = -1
            break

print(res)

 

res ๊ฐ’ ์ •ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋ฐ”๊ฟจ๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ํ™• ๋‹จ์ถ•๋๋‹ค

์ฒ˜์Œ ํ’€์—ˆ๋˜ ์ฝ”๋“œ๋Š” ๋‚ด๊ฐ€ ์งœ๋ฉด์„œ๋„ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธด ํ–ˆ๋‹ค,,, ใ…Žใ…ํ•˜