ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ด์ ์ ๋ค๋ฃฌ ์์ ์์ญ, ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ ๋ฌธ์ ์ ๊ฐ์ด `Floodfil`์ ํ์ฉํ์ฌ, ์ ๊ทผ ๊ฐ๋ฅํ ์์ญ์ ํ๋จํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ์ด๋ค. ์ด ๋ฌธ์ ์์๋ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ์์ญ์ ๋ํ ์กฐ๊ฑด๊ณผ ๋ฐฉ๋ฌธ ํ์ ๊ธฐ์กด ์ธ๊ตฌ์ ๋ํ ์ฒ๋ฆฌ ๋ถ๋ถ์ด ์ถ๊ฐ๋ ๋ฌธ์ ์ด๋ค.
ํ์ฌ ๊ตญ๊ฐ๋ก๋ถํฐ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ์ธ์ ๊ตญ๊ฐ๋ `L <= abs(ํ์ฌ ๊ตญ๊ฐ - ์ธ์ ๊ตญ๊ฐ) <= R`์ด๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ์ฌ์ผ ํ๋ค. ๋ง์ฝ ์ฐํฉ๊ตญ์ด 1 ์ด์ (ํ์ฌ ๊ตญ๊ฐ ์ ์ธ)๋ผ๋ฉด ์ธ๊ตฌ์ ์๋ฅผ ๋ชจ๋ `์ฐํฉ๊ตญ๊ฐ์ ์ธ๊ตฌ์์ ํฉ / ์ฐํฉ๊ตญ๊ฐ์ ์`๋ก ๋ณ๊ฒฝํ์ฌ์ผ ํ๋ค. ์ด๋ฅผ BFS๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ฉด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y):
return 0 <= x < n and 0 <= y < n and not visited[x][y]
def bfs(start):
q = deque([start])
cur_united = [start]
while q:
x, y = q.popleft()
for dx, dy in dirs:
next_x, next_y = x + dx, y + dy
if visitable(next_x, next_y) and \
l <= abs(populations[x][y] - populations[next_x][next_y]) <= r:
visited[next_x][next_y] = True
q.append((next_x, next_y))
cur_united.append([next_x, next_y])
# ํ์์ ์์ํ๋ ๊ตญ๊ฐ๋ ํฌํจํ๋ฏ๋ก 1 ์ด์์ธ ๊ฒฝ์ฐ ๊ตญ๊ฒฝ์ด ์ด๋ฆฐ ์ํ.
if len(cur_united) > 1:
# ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์๋ก์ด ์ธ๊ตฌ ์๋ฅผ ๊ณ์ฐํจ.
new_population = sum(populations[x][y] for x, y in cur_united) // len(cur_united)
for x, y in cur_united:
populations[x][y] = new_population
return 1
return 0
if __name__ == '__main__':
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
n, l, r = map(int, stdin.readline().split())
populations = [list(map(int, stdin.readline().split())) for _ in range(n)]
cnt = 0
while True:
visited = [[False] * n for _ in range(n)]
num_of_united = 0
for i in range(n):
for j in range(n):
if not visited[i][j]:
visited[i][j] = True
num_of_united += bfs([i, j])
# ๊ตญ๊ฒฝ์ด ์ด๋ฆฌ์ง ์๋ ๋ค๋ฉด, ๋ ์ด์ ํ์์ ์งํํ์ง ์์๋ ๋จ.
if not num_of_united:
break
cnt += 1
print(cnt)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16916 ๋ถ๋ถ ๋ฌธ์์ด (0) | 2020.10.19 |
---|---|
๋ฐฑ์ค: 6087 ๋ ์ด์ ํต์ (0) | 2020.10.18 |
๋ฐฑ์ค: 17143 ๋์์ (0) | 2020.10.15 |
๋ฐฑ์ค: 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2020.10.14 |
๋ฐฑ์ค: 19236 ์ฒญ์๋ ์์ด (0) | 2020.10.13 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ