bfs๋ก ์ํ์ข์ฐ ํ์ ์ธ๋ฑ์ค ๋ฆฌ์คํธ ๋ฝ์๋ด๊ธฐbfs๋ก ๋ค ๋์๋๋ฐ, ์ธ๋ฑ์ค ๋ฆฌ์คํธ ๊ธธ์ด๊ฐ ์์ผ๋ฉด breakโ ๋ช๊ฐ test ์คํจ โ๏ธ
์ ๊ธฐ๋ ๋ฐฐ์ถ ๋ฌธ์ ์ฒ๋ผ ๋ถ๋ถ ์ง๋จ์ด ๋ช๊ฐ์ฉ ๋์ฌ ์ ์์ผ๋ฏ๋ก ํ๋์ฉ bfs ํด์ค์ผํจ
import sys
from collections import deque
N, L, R = map(int,sys.stdin.readline().split())
countries = []
for _ in range(N):
countries.append(list(map(int, sys.stdin.readline().split())))
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
def bfs(x,y):
# ์ ์ญ์ visited ์ ์ธ -> ์ฌ๊ธฐ์ ์ ์ธ์ํด๋๋จ
queue = deque()
idx_list = []
queue.append((x, y))
idx_list.append((x, y))
while queue:
cur_x, cur_y = queue.popleft()
for i in range(4):
nx, ny = cur_x + dx[i], cur_y + dy[i]
if 0 <= nx < N and 0 <= ny < N and visited[nx][ny] == 0:
if L <= abs(countries[cur_x][cur_y] - countries[nx][ny]) <= R:
visited[nx][ny] = 1
queue.append((nx, ny))
idx_list.append((nx, ny))
return idx_list
answer = 0
while True:
visited = [[0] * (N) for _ in range(N)]
flag = False
for i in range(N):
for j in range(N):
# ์ ๊ธฐ๋ ๋ฐฐ์ถ์ฒ๋ผ ๋ถ๋ถ ์ง๋จ์ด ๋ช๊ฐ์ฉ ๋์ฌ ์ ์์ผ๋ฏ๋ก ํ๋์ฉ bfs ํด์ค์ผํจ
if visited[i][j] == 0:
visited[i][j] = 1
groups = bfs(i, j)
groups_length = len(groups)
# ๊ตญ๊ฐ ํ๋๋ง ๋์ค๋ฉด ์ฐํฉ์ด ์๋ ๊ฒ
if groups_length > 1:
flag = True
people_cnt = sum([countries[x][y] for x, y in groups]) // groups_length
for x, y in groups:
countries[x][y] = people_cnt
# ๋ฐ๋ณต๋ฌธ์ ๋ค ๋๋ ธ๋๋ฐ flag๊ฐ False์ด๋ฉด ๋์ด์ ์ธ๊ตฌ์ด๋ ๋ถ๊ฐ๋ฅ
if not flag:
break
answer += 1
print(answer)