-
[Python] ๋ฐฑ์ค 7576 ํ ๋งํ (BFS)๐ป Algorithm/Python 2022. 7. 8. 23:32
๐ ๋ฌธ์
์ฒ ์์ ํ ๋งํ ๋์ฅ์์๋ ํ ๋งํ ๋ฅผ ๋ณด๊ดํ๋ ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ ๋งํ ๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฒฉ์ ๋ชจ์ ์์์ ์นธ์ ํ๋์ฉ ๋ฃ์ด์ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ค.
์ฐฝ๊ณ ์ ๋ณด๊ด๋๋ ํ ๋งํ ๋ค ์ค์๋ ์ ์ต์ ๊ฒ๋ ์์ง๋ง, ์์ง ์ต์ง ์์ ํ ๋งํ ๋ค๋ ์์ ์ ์๋ค. ๋ณด๊ด ํ ํ๋ฃจ๊ฐ ์ง๋๋ฉด, ์ต์ ํ ๋งํ ๋ค์ ์ธ์ ํ ๊ณณ์ ์๋ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ต์ ํ ๋งํ ์ ์ํฅ์ ๋ฐ์ ์ต๊ฒ ๋๋ค. ํ๋์ ํ ๋งํ ์ ์ธ์ ํ ๊ณณ์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ๋ค ๋ค ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ฅผ ์๋ฏธํ๋ค. ๋๊ฐ์ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ค์๊ฒ๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ฉฐ, ํ ๋งํ ๊ฐ ํผ์ ์ ์ ๋ก ์ต๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฒ ์๋ ์ฐฝ๊ณ ์ ๋ณด๊ด๋ ํ ๋งํ ๋ค์ด ๋ฉฐ์น ์ด ์ง๋๋ฉด ๋ค ์ต๊ฒ ๋๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ์๊ณ ์ถ์ด ํ๋ค.
ํ ๋งํ ๋ฅผ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ ๊ฒฉ์๋ชจ์์ ์์๋ค์ ํฌ๊ธฐ์ ์ต์ ํ ๋งํ ๋ค๊ณผ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฉฐ์น ์ด ์ง๋๋ฉด ํ ๋งํ ๋ค์ด ๋ชจ๋ ์ต๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ๋จ, ์์์ ์ผ๋ถ ์นธ์๋ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์๋ ์๋ค.
์ ๋ ฅ
์ฒซ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ M,N์ด ์ฃผ์ด์ง๋ค. M์ ์์์ ๊ฐ๋ก ์นธ์ ์, N์ ์์์ ์ธ๋ก ์นธ์ ์๋ฅผ ๋ํ๋ธ๋ค. ๋จ, 2 ≤ M,N ≤ 1,000 ์ด๋ค. ๋์งธ ์ค๋ถํฐ๋ ํ๋์ ์์์ ์ ์ฅ๋ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์ฆ, ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์์์ ๋ด๊ธด ํ ๋งํ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ํ๋์ ์ค์๋ ์์ ๊ฐ๋ก์ค์ ๋ค์ด์๋ ํ ๋งํ ์ ์ํ๊ฐ M๊ฐ์ ์ ์๋ก ์ฃผ์ด์ง๋ค. ์ ์ 1์ ์ต์ ํ ๋งํ , ์ ์ 0์ ์ต์ง ์์ ํ ๋งํ , ์ ์ -1์ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์นธ์ ๋ํ๋ธ๋ค.
ํ ๋งํ ๊ฐ ํ๋ ์ด์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฌ๋ฌ๋ถ์ ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์ ๋๊น์ง์ ์ต์ ๋ ์ง๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ค. ๋ง์ฝ, ์ ์ฅ๋ ๋๋ถํฐ ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต์ด์๋ ์ํ์ด๋ฉด 0์ ์ถ๋ ฅํด์ผ ํ๊ณ , ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์ง๋ ๋ชปํ๋ ์ํฉ์ด๋ฉด -1์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ ์ ๋ ฅ 1
6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
์์ ์ถ๋ ฅ 1
8
์์ ์ ๋ ฅ 2
6 4 0 -1 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
์์ ์ถ๋ ฅ 2
-1
์์ ์ ๋ ฅ 3
6 4 1 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 -1 1
์์ ์ถ๋ ฅ 3
6
์์ ์ ๋ ฅ 4
5 5 -1 1 0 0 0 0 -1 -1 -1 0 0 -1 -1 -1 0 0 -1 -1 -1 0 0 0 0 0 0
์์ ์ถ๋ ฅ 4
14
์์ ์ ๋ ฅ 5
2 2 1 -1 -1 1
์์ ์ถ๋ ฅ 5
0
๐ ํ์ด
๐ฌ Code
import sys from collections import deque input = sys.stdin.readline m, n = map(int, input().split()) box = [] tomato = [] for i in range(n): box.append(list(map(int, input().split()))) for j in range(m): if box[i][j] == 1: tomato.append((0, i, j)) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] q = deque(tomato) while q: day, x, y = q.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < n and 0 <= ny < m and box[nx][ny] == 0: box[nx][ny] = 1 q.append((day+1, nx, ny)) for i in range(n): if 0 in box[i]: print(-1) sys.exit(0) print(day)
๐ก Solution
m, n = map(int, input().split()) box = [] tomato = [] for i in range(n): box.append(list(map(int, input().split()))) for j in range(m): if box[i][j] == 1: tomato.append((0, i, j))
- box: ๊ฐ ์์์ ํ ๋งํ ์ํ๋ฅผ ์ ์ฅํ๋ 2์ฐจ์ ๋ฆฌ์คํธ
- tomato: ์ต์ ํ ๋งํ ๊ฐ ์๋ ์์น๋ฅผ ์ ์ฅํ๋ ๋ฆฌ์คํธ. 0์ ์ด ํ ๋งํ ๊ฐ ์ต์ ๋ ์ง๋ฅผ ์๋ฏธํฉ๋๋ค.
q = deque(tomato) while q: day, x, y = q.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < n and 0 <= ny < m and box[nx][ny] == 0: box[nx][ny] = 1 q.append((day+1, nx, ny))
์ต๋งํ ๊ฐ ์๋ ์์น์ ๊ทผ์ฒ๋ง ์ดํด๋ณด๊ธฐ ์ํด์ ๋ฑ์ tomato๋ฅผ ๋ด์์ต๋๋ค.
(nx, ny)๋ ์ต๋งํ ์ ์์น์ธ (x, y)๋ก๋ถํฐ ์/ํ/์ข/์ฐ๋ก ์ด๋ํ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ์ด ์ด๋์์น์ ๋๋งํ ๊ฐ ์๋ค๋ฉด ์ต๋๋ก ๋ฐ๊ฟ์ค๋๋ค. ์ด ๋๋งํ ๊ฐ ์ต์ ๋ ์ง๋ ์ต๋งํ ๊ฐ ์ต์ ๋ ์ง์ ๋ค์ ๋ ์ด๋ฏ๋ก ๋ฑ์ day+1์ ๋ฃ์ด์ค๋๋ค.
์ ๊ทผ ๊ฐ๋ฅํ ๋๋งํ ๋ฅผ ๋ค ์ตํ์คฌ๋ค๋ฉด if๋ฌธ์๋ ๋ค์ด๊ฐ ์ผ์ด ์์ด์ง๋๋ค. ๋๋ฌธ์ day๊ฐ ๋ฐ๋ ์ผ์ด ์๊ณ , ๋น์ฐํ ์ต์ข ์ ์ผ๋ก day์๋ ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต๊ฒ ๋ ๋ ์ง๊ฐ ์ ์ฅ๋๋ฏ๋ก print(day)ํด์ฃผ๋ฉด ์ ๋ต์ฒ๋ฆฌ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
for i in range(n): if 0 in box[i]: print(-1) sys.exit(0) print(day)
๋จ! ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์ง ๋ชปํ๋ ์ํฉ์ ์ถ๋ ฅ์ ๋ค๋ฅด๊ฒ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ box๋ฅผ ๋๋ฉด์ ๋๋งํ ๊ฐ ์กด์ฌํ๋ฉด -1์ ์ถ๋ ฅํ๊ณ ์ข ๋ฃ์ํต๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 3107 IPv6 (String) (0) 2022.07.08 [Python] ๋ฐฑ์ค 13022 ๋๋์ ์ฌ๋ฐ๋ฅธ ๋จ์ด (String) (0) 2022.07.08 [Python] ๋ฐฑ์ค 16719 ZOAC (๊ตฌํ) (0) 2022.07.08 [Python] ๋ฐฑ์ค 1541 ์์ด๋ฒ๋ฆฐ ๊ดํธ (Greedy) (0) 2022.07.08 [Python] ๋ฐฑ์ค 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (BFS) (0) 2022.07.08