โ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/7569
์ฒ ์์ ํ ๋งํ ๋์ฅ์์๋ ํ ๋งํ ๋ฅผ ๋ณด๊ดํ๋ ํฐ ์ฐฝ๊ณ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ ๋งํ ๋ ์๋์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ฒฉ์๋ชจ์ ์์์ ์นธ์ ํ๋์ฉ ๋ฃ์ ๋ค์, ์์๋ค์ ์์ง์ผ๋ก ์์ ์ฌ๋ ค์ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ค.
์ฐฝ๊ณ ์ ๋ณด๊ด๋๋ ํ ๋งํ ๋ค ์ค์๋ ์ ์ต์ ๊ฒ๋ ์์ง๋ง, ์์ง ์ต์ง ์์ ํ ๋งํ ๋ค๋ ์์ ์ ์๋ค. ๋ณด๊ด ํ ํ๋ฃจ๊ฐ ์ง๋๋ฉด, ์ต์ ํ ๋งํ ๋ค์ ์ธ์ ํ ๊ณณ์ ์๋ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ต์ ํ ๋งํ ์ ์ํฅ์ ๋ฐ์ ์ต๊ฒ ๋๋ค. ํ๋์ ํ ๋งํ ์ ์ธ์ ํ ๊ณณ์ ์, ์๋, ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ๋ค ์ฌ์ฏ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ฅผ ์๋ฏธํ๋ค. ๋๊ฐ์ ๋ฐฉํฅ์ ์๋ ํ ๋งํ ๋ค์๊ฒ๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ฉฐ, ํ ๋งํ ๊ฐ ํผ์ ์ ์ ๋ก ์ต๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฒ ์๋ ์ฐฝ๊ณ ์ ๋ณด๊ด๋ ํ ๋งํ ๋ค์ด ๋ฉฐ์น ์ด ์ง๋๋ฉด ๋ค ์ต๊ฒ ๋๋์ง ๊ทธ ์ต์ ์ผ์๋ฅผ ์๊ณ ์ถ์ด ํ๋ค.
ํ ๋งํ ๋ฅผ ์ฐฝ๊ณ ์ ๋ณด๊ดํ๋ ๊ฒฉ์๋ชจ์์ ์์๋ค์ ํฌ๊ธฐ์ ์ต์ ํ ๋งํ ๋ค๊ณผ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฉฐ์น ์ด ์ง๋๋ฉด ํ ๋งํ ๋ค์ด ๋ชจ๋ ์ต๋์ง, ๊ทธ ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ๋จ, ์์์ ์ผ๋ถ ์นธ์๋ ํ ๋งํ ๊ฐ ๋ค์ด์์ง ์์ ์๋ ์๋ค.
๐ค ์ ์ถ๋ ฅ ์์
๐ง ๋์ด๋/์์ ์๊ฐ
โ ๋์ด๋: solved.ac ๊ธฐ์ค G5
โ ์์ ์๊ฐ: 54๋ถ
โ ๊ถ์ฅ ์๊ฐ: 1์๊ฐ 15๋ถ
๐ฉ๐ซ ์ฐธ๊ณ
https://www.acmicpc.net/problem/7576
๐ก ํ์ด
1) ๋ฌธ์ ์ ํ ํ์
7576๋ฒ ํ ๋งํ ๋ฌธ์ ์ ์ธต์ ๊ฐ๋ ์ด ์ถ๊ฐ๋ ๋ฌธ์ ๋ผ 7576๋ฒ ๋ฌธ์ ์ ๋์ผํ๊ฒ BFS๋ก ๊ตฌํํ๋ค.
2) ์ ์์ฌํญ
์ผ๋ฐ์ ์ธ BFS ๋ฌธ์ ํ์ด์์ ํฌ๊ฒ ๋ฒ์ด๋๋ ๊ฑด ์์์ง๋ง ๋ฐฐ์ด ์ฐจ์์ด ํ๋ ๋๋ค ๋ณด๋๊น ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ์ด ๋ช ๊ฐ ์์๋ค.
โ 3์ฐจ์ ๋ฐฐ์ด ์ ์ธ
2์ฐจ์ ์ด์์ ๋ฐฐ์ด์ ๋ค๋ฃจ๋ ๋ฐ ์ฝํ ํธ์ด๋ผ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํ ๋งํ ์ ๋ณด๋ฅผ ๋ฐ์์ ๋ฐญ ์ ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ๋ถํฐ ์ด์ง ํท๊ฐ๋ ธ๋ค. ๋์ด๋ฅผ ๋ํ๋ด๋ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ฅ ์์ ์ค๊ธฐ ๋๋ฌธ์ farm[์ธต ์ธ๋ฑ์ค][ํ ์ธ๋ฑ์ค][์ด ์ธ๋ฑ์ค]๋ก ์ ๊ทผํด์ผ ํจ!
โก ๋ชจ๋ ํ ๋งํ ๊ฐ ๋ค ์ต์ด์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
๋ชจ๋ ํ ๋งํ ๊ฐ ์ด๋ฏธ ๋ค ์ต์ ์ํ๋ผ ์ตํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ 0์ ์ถ๋ ฅํด์ผ ํ๋ค. ์ด ๋ถ๋ถ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณค๋ค.
1๏ธโฃ ํ ๋จ์๋ก 0์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๊ณ 0์ด ํฌํจ๋์ด ์์ง ์์ ํ์ด๋ฉด all_ripe๋ผ๋ ๋ณ์ ๊ฐ+1
2๏ธโฃ all_ripe ๊ฐ์ด ํ ๋งํ ๋ฐญ์ ์ ์ฒด ํ ๊ฐ์ N*H(ํ ์ธต์ ํ์ด N๊ฐ์ด๊ธฐ ๋๋ฌธ)์ ๋์ผํ๋ฉด 0 ์ถ๋ ฅ
โข ์ขํ ์ด๋์ฉ ๋ฐฐ์ด ์ ์ธ
2์ฐจ์ ๋ฐฐ์ด์์ BFS ๋ฌธ์ ๋ฅผ ํ ๋๋ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ผ๋ก ์์ง์ผ ์ ์๊ฒ dx, dy ๋ฐฐ์ด์ ์ ์ํ๋๋ฐ ์ฌ๊ธฐ์๋ dz ๋ฐฐ์ด์ ์ถ๊ฐํด์ ์ธต์ ์ฎ๊ฒจ ๋ค๋๋ ๊ฒ์ ๊ตฌํํ๋ค.
์ด์ธ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ชจ๋ 7576๋ฒ๊ณผ ๋๊ฐ์ด ์ฒ๋ฆฌํด์คฌ๋ค.
3) ๊ตฌํ
import sys
from collections import deque
input = sys.stdin.readline
M, N, H = map(int, input().split())
farm = []
for _ in range(H):
tomato = []
for _ in range(N):
tomato.append(list(map(int, input().split())))
farm.append(tomato)
all_ripe = 0
ripen_tomato = deque()
day = [[[0]*M for _ in range(N)] for _ in range(H)]
for h in range(0, len(farm)):
for r in range(0, len(farm[h])):
if 0 not in farm[h][r]:
all_ripe += 1
for c in range(0, len(farm[h][r])):
if farm[h][r][c] == 1:
ripen_tomato.append((h, r, c))
elif farm[h][r][c] == -1:
day[h][r][c] = -1
if all_ripe == N*H:
print(0)
else:
dx = [1, -1, 0, 0, 0, 0] # x์ถ -> ์ค๋ฅธ์ชฝ, ์ผ์ชฝ
dy = [0, 0, 1, -1, 0, 0] # y์ถ -> ์๋, ์
dz = [0, 0, 0, 0, 1, -1] # z์ถ -> ์, ๋ค
while ripen_tomato:
h, r, c = ripen_tomato.popleft()
for i in range(6):
new_h, new_r, new_c = h+dz[i], r+dx[i], c+dy[i]
if (0 <= new_h < H and 0 <= new_r < N and 0 <= new_c < M) and farm[new_h][new_r][new_c] == 0:
farm[new_h][new_r][new_c] = farm[h][r][c]+1
ripen_tomato.append((new_h, new_r, new_c))
day = 0
for height in farm:
for row in height:
if 0 in row:
print(-1)
exit()
day = max(day, max(row))
print(day-1)
4) ์ด๋ ค์ ๋ ์ /๋ฐฐ์ด ์
๐จ ์ด๋ ค์ ๋ ์
- 3์ฐจ์ ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ โญ ์ฐ์ต์ฅ์ ๋ฐฐ์ด ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก ์จ๊ฐ๋ฉด์ ํ์๋ค..^^
โ ๋ฐฐ์ด ์
- 2์ฐจ์ ์ด์์ ๋ฐฐ์ด ์์์ ์ ๊ทผํ ๋๋ ์ถ๊ฐ๋ ์ฐจ์์ ์ ์ผ ์์ผ๋ก ๋ณด๋ด์ ์๊ฐํ๋ฉด ๋๋ค.
'Problem Solving > [ํญํด99] TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
99ํด๋ฝ ์ฝํ ์คํฐ๋ 14์ผ์ฐจ TIL / ๊ทธ๋ฆฌ๋ (0) | 2024.11.10 |
---|---|
99ํด๋ฝ ์ฝํ ์คํฐ๋ 13์ผ์ฐจ TIL / ๊ทธ๋ฆฌ๋ (1) | 2024.11.09 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 11์ผ์ฐจ TIL / DFS(๊น์ด ์ฐ์ ํ์) (6) | 2024.11.07 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 10์ผ์ฐจ TIL / BFS(๋๋น ์ฐ์ ํ์) (2) | 2024.11.06 |
99ํด๋ฝ ์ฝํ ์คํฐ๋ 9์ผ์ฐจ TIL / BFS(๋๋น ์ฐ์ ํ์) (0) | 2024.11.06 |