2468๋ฒ: ์์ ์์ญ
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋
www.acmicpc.net
์ค๋ช
๐ ๋ฌธ์ ํต์ฌ - ์์ ์์ญ์ด ์ต๋์ธ ๊ฒ์ ๊ตฌํ๋ผ.
๋๋ ์ฒ์์ ๋ฌด์จ ์๋ฆฌ์ธ๊ฐ ํ๋๋ฐ, ์์ญ์ด๋ผ๋ ๊ฒ์ ์๊ฐํด์ผ ํ๋ค. ๊ฐ์๋์ ์ฃผ์ด์ง์ง ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฐ์๋์ ๋ฐ์ ธ์ผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด N = 5์ธ ์ง์ญ์ด ์๋ค๊ณ ํ์.

์์ญ์ ์ค๋ฅธ์ชฝ, ์ผ์ชฝ, ์, ์๋๊ฐ ์ด์ด์ ธ ์์ผ๋ฉด ํ ์์ญ์ผ๋ก ๋ณธ๋ค.
๋ง์ฝ, ๊ฐ์๋์ด 0์ผ ๋ ๋น๊ฐ ์ค์ง ์์์ ๋ปํ๋ฏ๋ก ์ ๊ธฐ๋ ๊ณณ์ ์๋ค. ์ผ, ์ค, ์, ์๋๊ฐ ๋ค ์ด์ด์ ธ์์ผ๋ฉด ํ๋์ ์์ญ์ผ๋ก ๋ณธ๋ค๊ณ ํ์ผ๋ฏ๋ก ์์ ์์ญ์ 1์ด๋ค.

๋ง์ฝ, ๊ฐ์๋์ด 4์ผ ๋ ๋์ด๊ฐ 4์ดํ์ธ ์ง์ญ์ ์ ๊ธด๋ค. ๋ฐ๋ผ์ ์ ๊ธด ๊ณณ์ ์น ํ๊ณ ๋จ์ ์์ญ์ ๋ณด๋ฉด, ์ด 5๊ณณ์ด๋ค.
(๊ฐ์๋์ด 3์ผ ๋๋ ์์ ์์ญ์ด ์ด 4๊ฐ๊ฐ ๋๋ค.)

๋ง์ฝ, ๊ฐ์๋์ด 6์ผ ๋ ๋์ด๊ฐ 6์ดํ์ธ ๊ณณ์ ๋ชจ๋ ์ ๊ธด๋ค. ๊ทธ๋์ ๋จ์ ์์ญ์ ์ด 4๊ณณ์ด๋ค.
๊ฐ์๋์ด 6์ด์์ด ๋๋ฉด ์์ ์์ญ์ ์ ์ ์ค์ด๋ค ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์๋์ด 4์ผ ๋๊ฐ ์์ ์์ญ์ ์๊ฐ ์ต๋์ด๋ฏ๋ก ์์ ์์ญ์ ์๋ 5์ด๋ค.
ํ์ด
โ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ - BFS ํ์ด
https://dev-cloud.tistory.com/161 -> ์ ์ฌํ ๋ฌธ์ ์ด๋ค. BFS์ ๊ด๋ จํด์ ๋ ์์ธํ ์ค๋ช ์ด ์์ผ๋ ๋ด๋ณด์.
Solution
#15:55 - 16:47 ์ดํ ํ์ด๋ด->๋ณด์์ ์ด ์ข ํ์ํ์. ๋ณด์ํ๊ณ ์ ์ถํ๋๋ฐ ์๊ฐ์ด๊ณผ ๊ฑธ๋ฆผ)
#๋ฌธ์ ์ดํด ์๋ฃ(30๋ถ์ด๋ ๊ฑธ๋ ธ๋ค... ์์ญ์ด๋ผ๋ ๊ฑธ ์๊ฐ ๋ชปํ๋ค.)
import sys
input = sys.stdin.readline
#bfs๋ฅผ ์ํด deque ์ํฌํธ
from collections import deque
N = int(input())
area = [list(map(int, input().split())) for _ in range(N)]
#์ต๋ ๋์ด ์ฐพ๊ธฐ
max_value = max(map(max, area))
#์ค๋ฅธ์ชฝ๋ถํฐ ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]
def bfs(rain, x, y): #rain = ๊ฐ์๋
'''#์ด๊ฑธ ์ถ๊ฐํ๋ฉด ๋ต์ ๋์ค๋ ์๊ฐ์ด๊ณผ ๋์ด
# for๋ฌธ์ผ๋ก area๋ฅผ ๋ค ๋์์ ๊ฐ์๋๋ณด๋ค ๋ฎ์ ๊ณณ์ checkํ์ํด
for i in range(N):
for j in range(N):
if area[i][j] <= rain:
area[i][j] = -1 #์ ๊ฒผ์์ ๋ํ๋
'''
q = deque()
q.append((x, y))
visited[x][y] = 1
while q:
x, y = q.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if -1 < nx < N and -1 < ny < N:
if area[nx][ny] > rain and visited[nx][ny] == 0:
visited[nx][ny] = 1 # ๋ฐฉ๋ฌธ์ฒดํฌ ํ ํ์ ๋ฃ์
q.append((nx, ny))
res = []
for rain in range(max_value):
cnt = 0
visited = [[0 for _ in range(N)] for _ in range(N)] # ๋ฐฉ๋ฌธ ํ์
for i in range(N):
for j in range(N):
#์ ๊ธฐ๋ ๊ณณ์ ๋ฐ๋ณต๋ฌธ ๋๋ฉด์ ์ ๊ฒผ๋ค๋ ํ์ ํ์ง๋ง๊ณ ํด๋น๋๋ ๊ณณ๋ง ํ์ํ๋ ๊ฒ์ด ํจ์ฌ ํจ์จ์ ์ด๋ค.
if visited[i][j] == 0 and area[i][j] > rain:
bfs(rain, i, j)
cnt += 1
res.append(cnt)
print(max(res))'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| BOJ 2960๋ฒ : ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Python/Silver 4) (0) | 2023.09.23 |
|---|---|
| BOJ 2583๋ฒ : ์์ญ ๊ตฌํ๊ธฐ (Python/Silver 1) (0) | 2023.09.22 |
| BOJ 7568๋ฒ : ๋ฉ์น (Python/Silver 5) (0) | 2023.09.04 |
| BOJ 2667๋ฒ : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ (Python/Silver 1) (0) | 2023.05.16 |
| BOJ 2178๋ฒ : ๋ฏธ๋ก ํ์ (Python/Silver 1) (1) | 2023.05.13 |