๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

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

์ œ๋ด‰์•„ 2022. 6. 8. 04:51

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

 

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

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

www.acmicpc.net

ํ’€์ด ๊ณผ์ •

bfs๋ฅผ ์ด์šฉํ•ด ๋ฏธ๋กœ์ฐพ๊ธฐ๋ฅผ ํ’€์—ˆ๋˜ ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.

'2178 - ๋ฏธ๋กœํƒ์ƒ‰'์„ ๋จผ์ € ํ’€์–ด๋ณด๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

from collections import deque

M, N = map(int,input().split())
dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]

box = [] # 1 ์ต์€ ํ† , 0 ์•ˆ์ต์€ ํ† , -1 ๋นˆ ์นธ
day = [[0 for _ in range(M)] for _ in range(N)]

deq = deque()

for i in range(N):
    box.append([int(x) for x in input().split()])
    for j in range(M):
        if box[i][j] == 1:
            deq.append([i,j])

์ƒํ•˜์ขŒ์šฐ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ dx, dy ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ 

ํ† ๋งˆํ† ๋ฅผ ๋‹ด์„ ์ƒ์ž box๋ฆฌ์ŠคํŠธ์™€ ๋‚ ์งœ๋ฅผ ๊ธฐ๋กํ•  day๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

 

์ดํ›„ box์— ํ† ๋งˆํ†  ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ทธ์ค‘ ์ต์€ ํ† ๋งˆํ† ๋ฅผ deque์— ์ถ”๊ฐ€ํ•œ๋‹ค.

 

while deq:
    x, y = deq.popleft()
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if 0 <= nx < N and 0 <= ny < M:
            if box[nx][ny] == 0:
                box[nx][ny] = 1
                day[nx][ny] = day[x][y] + 1
                deq.append([nx,ny])

์ดํ›„ pop์„ ํ•ด๊ณ  ๊ฐ ์ขŒํ‘œ์— ๋Œ€ํ•ด ์ƒํ•˜์ขŒ์šฐ๋กœ 0์ธ์ง€ ํ™•์ธํ•˜๋ฉด์„œ deque์— ์ถ”๊ฐ€ํ•œ๋‹ค.

๋™์‹œ์— day๋ฆฌ์ŠคํŠธ๋„ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค. ๋‚ ์งœ๊ฐ€ ์ง€๋‚ ๋•Œ ๋งˆ๋‹ค ํ† ๋งˆํ† ๊ฐ€ ์ƒํ•˜์ขŒ์šฐ๋กœ ํผ์ ธ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—

์ต์€ ํ† ๋งˆํ†  ๋‚ ์งœ(day[x][y])์— + 1 ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

zeroflag = False
resultday = 0
for i in range(N):
    for j in range(M):
        if box[i][j] == 0:
            zeroflag = True

๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ์กฐ๊ฑด์„ ๋งž์ถ˜๋‹ค.

 

์ถœ๋ ฅ์กฐ๊ฑด์—์„œ ์ž…๋ ฅํ• ๋•Œ ์ด๋ฏธ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์—ˆ์œผ๋ฉด 0, ์ต์ง€๋ชปํ•œ ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•˜๋ฉด -1

์ด์™ธ์˜ ๊ฒฝ์šฐ๋Š” ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์„๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฐ ๋‚ ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

zeroflag ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ต์ง€ ๋ชปํ•œ ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค€๋‹ค.

๋™์‹œ์— day๋ฆฌ์ŠคํŠธ์—์„œ ์ตœ๋Œ€๊ฐ’์„ ํ™•์ธํ•ด์ค€๋‹ค. ์ด๋ฏธ ์ž…๋ ฅ๋•Œ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์—ˆ๋‹ค๋ฉด ์ตœ๋Œ€๊ฐ’์€ 0์ด๋‹ค.

 

์ดํ›„ ์ต์ง€๋ชปํ•œ ํ† ๋งˆํ†  ์œ ๋ฌด์— ๋”ฐ๋ผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.