ํ์ด
์ธ๊ตฌ ์ด๋์ด ์ผ๋ง๋ ์ผ์ด๋๋์ง ์์๋ด์ผํ๋ ๋ฌธ์ ์ด๋ค. ์ธ๊ตฌ ์ด๋์ ์ฐํฉ์ด ์์ฑ๋์์ ๋ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ฐ์ ํ์ฌ ์ํฉ์ ๋ง๋ ์ฐํฉ์ ์์ฑํด์ค์ผํ๋ค. ์ด ๋ BFS ๋ฅผ ํตํด ์ฐํฉ์ด ๊ฐ๋ฅํ ๋์๋ค์ union ์ ๋ฌถ์ด์ค ๋ค ํด๋น ๋ณ์์ ํน์ฑ์ ๋ฐ๋ผ์ ์ฐ์ฐ์ ํด์ฃผ๋ฉด๋๋ค.
์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ๋ฌ๊ฐ์ง ์ฐํฉ์ด ์์ฑ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ขํ์์ ์ฐํฉ ์์ฑ์ด ๊ฐ๋ฅํ ์ง๋ฅผ ํ๋จํ๊ธฐ ์ํด ๋ชจ๋ ์ขํ๋ฅผ ๋๋ฉด์ BFS ๋ฅผ ์คํํด์ค๋ค. BFS ๋ฅผ ํตํด ์ฐํฉ์ด ์์ฑ๋์์ ๊ฒฝ์ฐ ์ฐํฉ์ ํด๋น๋๋ ๋์์ ์ธ๊ตฌ์๋ฅผ ์์ ํด์ค ๋ค ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ ๋์๋ฅผ ์ฐพ๊ณ ๋ง์ฝ ์ฐํฉ ์์ฑ์ด ๊ฐ๋ฅํ๋ค๋ฉด ์ ์ฐ์ฐ์ ๋ฐ๋ณตํด์ค๋ค.
๋ชจ๋ ์ขํ์ ๋ํ ํ์์ด ๋๋ ํ ๋ณํ 2์ฐจ์ ๋ฐฐ์ด์์ ๋ค์ ํ ๋ฒ ์ธ๊ตฌ ์ด๋์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๊ฐ์ ์ฐ์ฐ์ ๋ฐ๋ณตํ๋ค. ๋ง์ฝ ๋ฐ๋ณตํ ์ฐ์ฐ์์ ์ฐํฉ์ด ํ๋๋ ์์ฑ๋์ง ์์๋ค๋ฉด, ๋ฐ๋ณต๋ฌธ์ ํ์ถํ ๋ค ์ธ๊ตฌ ์ด๋์ด ์ผ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด๋๋ค.
์์ค์ฝ๋
# ์ธ๊ตฌ ์ด๋
from collections import deque
import sys
input = sys.stdin.readline
def bfs(i, j):
q = deque()
q.append([i, j])
union = []
union.append([i, j])
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < n and visited[nx][ny] == 0: # ํ๋ฒ๋ ๊ฐ ์ ์ด ์์ผ๋ฉฐ ๋ฒ์ ๋ด์ผ ๋
if l <= abs(s[x][y] - s[nx][ny]) <= r: # ๋ ๋์์ ์ฐจ์ด๊ฐ ๋ฒ์ ๋ด ์ผ ๊ฒฝ์ฐ
q.append([nx, ny])
union.append([nx, ny]) # ์ฐํฉ์ ์์๋๋ ๋์์ ์ขํ
visited[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
return union
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
n, l, r = map(int, input().split())
s = [list(map(int, input().split())) for _ in range(n)]
cnt = 0
while True:
visited = [[0]*n for _ in range(n)]
isUnion = False
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
visited[i][j] = 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
union = bfs(i, j) # ๋ฐฉ๋ฌธํ ๋์์ ๋ํ BFS ์คํ
if len(union) > 1: # ์ฐํฉ์ด ์์ฑ๋์์ ๊ฒฝ์ฐ
isUnion = True # ํ์ฌ ์ฐํฉ์ด ์๋ ์ํ๋ผ๊ณ ๋ฐ๊ฟ์ค
avg = sum([s[x][y] for x, y in union]) // len(union)
for x, y in union:
s[x][y] = avg
if not isUnion: # ๋ชจ๋ ์ขํ๋ฅผ ๋์์์๋ ์ฐํฉ์ด ์์ฑ๋์ง ์์๋ค๋ฉด ๋ฐ๋ณต๋ฌธ ํ์ถ
break
cnt += 1 # ๋ชจ๋ ์ขํ๋ฅผ ๋ ํ ์ธ๊ตฌ์ด๋์ด ์ข
๋ฃ๋์์ ๋ +1
print(cnt)