๐ก ์กฐ๊ฑด
- NรNํฌ๊ธฐ์ ๋
์ด ์๊ณ , ๋
์ 1ร1๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
N, L, R์ด ์ฃผ์ด์ง๋ค. (1 โค N โค 50, 1 โค L โค R โค 100)
- ์ธ๊ตฌ ์ด๋์ ํ๋ฃจ ๋์ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๊ณ , ๋ ์ด์ ์๋ ๋ฐฉ๋ฒ์ ์ํด ์ธ๊ตฌ ์ด๋์ด ์์ ๋๊น์ง ์ง์๋๋ค.
- ๊ตญ๊ฒฝ์ ์ ๊ณต์ ํ๋ ๋ ๋๋ผ์ ์ธ๊ตฌ ์ฐจ์ด๊ฐ L๋ช
์ด์, R๋ช
์ดํ๋ผ๋ฉด, ๋ ๋๋ผ๊ฐ ๊ณต์ ํ๋ ๊ตญ๊ฒฝ์ ์ ์ค๋ ํ๋ฃจ ๋์ ์ฐ๋ค.
- ์์ ์กฐ๊ฑด์ ์ํด ์ด์ด์ผํ๋ ๊ตญ๊ฒฝ์ ์ด ๋ชจ๋ ์ด๋ ธ๋ค๋ฉด, ์ธ๊ตฌ ์ด๋์ ์์ํ๋ค.
- ๊ตญ๊ฒฝ์ ์ด ์ด๋ ค์์ด ์ธ์ ํ ์นธ๋ง์ ์ด์ฉํด ์ด๋ํ ์ ์์ผ๋ฉด, ๊ทธ ๋๋ผ๋ฅผ ์ค๋ ํ๋ฃจ ๋์์ ์ฐํฉ์ด๋ผ๊ณ ํ๋ค.
- ์ฐํฉ์ ์ด๋ฃจ๊ณ ์๋ ๊ฐ ์นธ์ ์ธ๊ตฌ์๋ (์ฐํฉ์ ์ธ๊ตฌ์) / (์ฐํฉ์ ์ด๋ฃจ๊ณ ์๋ ์นธ์ ๊ฐ์)๊ฐ ๋๋ค.
- ์ฐํฉ์ ํด์ฒดํ๊ณ , ๋ชจ๋ ๊ตญ๊ฒฝ์ ์ ๋ซ๋๋ค.
- ๊ฐ ๋๋ผ์ ์ธ๊ตฌ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ธ๊ตฌ ์ด๋์ด ๋ฉฐ์น ๋์ ๋ฐ์ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด์ผํ๋ค.
- rํ c์ด์ ์ฃผ์ด์ง๋ ์ ์๋ A[r][c]์ ๊ฐ์ด๋ค. (0 โค A[r][c] โค 100)
- BFS ์๊ณ ๋ฆฌ์ฆ, ๊ตฌํ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
from collections import deque
n, l, r = map(int, stdin.readline().split())
if l > r:
l, r = r, l
board = []
for _ in range(n):
board.append(list(map(int, stdin.readline().split())))
dx, dy = [1, 0, 0, -1], [0, -1, 1, 0]
def check(x, y):
visited = set()
q = deque()
visited.add((x, y))
q.append((x, y, board[x][y]))
vals = [board[x][y]]
tf = False
while q:
x, y, cost = q.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if -1 < nx < n and -1 < ny < n:
if l <= abs(cost - board[nx][ny]) <= r and (nx, ny) not in visited:
visited.add((nx, ny))
q.append((nx, ny, board[nx][ny]))
vals.append(board[nx][ny])
tf = True
if not tf:
return False
else:
res = int(sum(vals) / len(vals))
return [res, visited]
cnt = 0
while 1:
tf = []
for i in range(n):
for j in range(n):
temp = check(i, j)
if temp is not False:
tf.append(temp)
if not tf:
break
else:
cnt += 1
for val, visited in tf:
for x, y in visited:
board[x][y] = val
print(cnt)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
2 20 50
50 30
30 40
์คํ๊ฒฐ๊ณผ
1
โจ๏ธ ๋ฌธ์ ํ์ด
- board ๋ฆฌ์คํธ์ ๊ฐ ๊ตญ๊ฐ์ ์ธ๊ตฌ์๋ฅผ ์
๋ ฅ ๋ฐ๊ณ , ์ธ๊ตฌ ์ด๋ ํ์๋ฅผ ์ ์ฅํ cnt ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํ.
- ์ธ๊ตฌ ์ด๋์ด ์ผ์ด๋์ง ์์ ๋๊น์ง while ๋ฐ๋ณต์ ํตํด์ ์ฒดํฌ๋ฅผ ํด์ค ๊ฒ.
- ์ธ๊ตฌ ์ด๋์ด ์ผ์ด๋ฌ์ ๋, ์ธ๊ตฌ ์ด๋ ํ์ ์ธ๊ตฌ ์์ ์ธ๊ตฌ ์ด๋์ด ์ผ์ด๋ ๋์์ ์ขํ๋ฅผ ๋ด์ ๋ฆฌ์คํธ ๋ณ์ tf๋ฅผ ์์ฑํ๋ค.
- board ๋ฅผ ์ํํ๋ฉด์, ๊ฐ ์ขํ์์ ์ฐํฉ์ด ๋ ์ ์๋ ๊ตญ๊ฐ๋ฅผ ์ฒดํฌํ์ฌ ๋ฐํ๋ ๊ฐ์ temp์ ์ ์ฅํ๋ค.
๋ง์ฝ, temp ๊ฐ False๋ผ๋ฉด ์ธ๊ตฌ์ด๋์ด ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ค.
๋ฐ๋๋ก False ๊ฐ ์๋๋ผ๋ฉด ์ธ๊ตฌ์ด๋์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
- board ์ ์ฒด๋ฅผ ์ํํ์์๋ ์ธ๊ตฌ์ด๋์ด ์ผ์ด๋์ง ์์ tf๊ฐ ๋น์ด์๋ค๋ฉด, ๊ทธ๋๋ก while ๋ฌธ ๋ฐ์ผ๋ก ๋์จ๋ค.
- tf๊ฐ ๋น์ด์์ง ์๋ค๋ฉด, ์ธ๊ตฌ์ด๋ ํ์(cnt)๋ฅผ + 1 ํด์ค ๋ค,
tf ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ํํ๋ฉด์, ์ฐํฉ๋ผ๋ฆฌ์ ์ธ๊ตฌ ์ด๋์ ํ ์ขํ์ ํด๋นํ๋ ์ธ๊ตฌ ์๋ก board ๊ฐ์ ๊ฐฑ์ ํ๋ค.
- check() ํจ์์ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
- BFS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ขํ์ ์ฐํฉ์ด ๋ ์ ์๋ ๋ชจ๋ ๊ตญ๊ฐ๋ฅผ ์ฐพ๋๋ค.
- ๋ค์ ์ด๋ํ๋ ค๋ ์ขํ๊ฐ ๋ฐฉ๋ฌธํ์ง ์์์ด์ผํ๊ณ ,
๊ทธ ์ขํ์ ํด๋นํ๋ board์ ๊ฐ์ด l <= ๊ตญ๊ฒฝ์ ๊ณต์ ํ๋ ๊ตญ๊ฐ๋ค์ ์ธ๊ตฌ ์ฐจ์ด <= r ์ ์กฐ๊ฑด์ ์ง์ผ์ผํ๋ค.
- ๋ํ (1), (2) ์ ์กฐ๊ฑด์ ์งํจ ๊ฒฝ์ฐ, ์ฐํฉ๋ค์ ๊ฐ ์ธ๊ตฌ์๋ vals ๋ฆฌ์คํธ์ ์ ์ฅํด ํ๊ท ์ธ๊ตฌ์๋ฅผ ๊ณ์ฐํ ์ ์๊ฒ ํ๋ค.
- check ํจ์ ๋ด์ ์ธ๊ตฌ์ด๋ ํ๋ณ ๋ณ์์ธ tf ์ ์ธ๊ตฌ์ด๋์ ํ์ ์, True ๊ฐ์ ์ ์ฅํ๋ค.
๐พ ๋๋์
- ๊ตญ๊ฒฝ์ ์ ๊ณต์ ํ๋ ๋ ๊ตญ๊ฐ์ ์ธ๊ตฌ ์ฐจ์ด ์กฐ๊ฑด์ ๋ฃ๋ ๊ฒ์์ ํ๋ฒ ํค๋งธ๋ค.
- ์ฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ๊ตญ๊ฐ๋ค์ ์ธ๊ตฌ ํ๊ท ์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์์ ๊ณ ๋ฏผ์ ํ์๋ค.
- ๋ชจ๋ ์ฐํฉ์ ๋ฐ๋ก ๊ตฌํด์ ์ฐํฉ๋ผ๋ฆฌ์ ํ๊ท ์ธ๊ตฌ ์๋ก ๊ฐฑ์ ํ๋ ๋ถ๋ถ์ด ํ๋ฒ์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
- ํ์ง๋ง (3)์ ๋ฐฉ์์ด ์๋ ์ฐํฉ์ด ์๊ธธ๋๋ง๋ค ๋ณ๊ฒฝํด์ฃผ์ด ์์ ๊ฒฐ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋์ค๋ ๋์ฐธ์ฌ๊ฐ ์์๋ค.
- BFS ์๊ณ ๋ฆฌ์ฆ ์ค์์๋ ์กฐ๊ฑด์ด ๊ฝค ์์ด์ ๊ตฌํ์ด ์กฐ๊ธ ๋ฌป์ด๋์จ ๋ฌธ์ ๊ฐ์๊ณ , ํ๊ธฐ ์กฐ๊ธ ํ์ด ๋ค์๋ค.