https://www.acmicpc.net/problem/7576
ํ์ด ๊ณผ์
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์ด๋ค.
์ดํ ์ต์ง๋ชปํ ํ ๋งํ ์ ๋ฌด์ ๋ฐ๋ผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11718 ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ (python ํ์ด์ฌ) (0) | 2022.06.10 |
---|---|
[๋ฐฑ์ค] 1005 ACMCraft (python ํ์ด์ฌ) (0) | 2022.06.10 |
[๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ(python ํ์ด์ฌ) (0) | 2022.06.09 |
[๋ฐฑ์ค] 14503 ๋ก๋ด ์ฒญ์๊ธฐ (python ํ์ด์ฌ) (0) | 2022.05.23 |
[๋ฐฑ์ค] 14502 _์ฐ๊ตฌ์ (python ํ์ด์ฌ) (0) | 2022.05.13 |