
이번 문제는 삼성 기출 문제로 BFS를 통해 개방할 수 있는 국경선들을 모두 체크하고, 현재 위치의 나라와 연결된 모든 나라들을 구하여 그 나라들의 인구수를 평균값으로 갱신해준다. 이 과정을 거치기 전의 전체 나라들의 인구 상황을 저장하고, 이 과정을 거친 후의 인구 상황과 비교하여 둘이 같을 때가지 반복하여 진행하였다.
(sy, sx)를 넣는다.visited[sy][sx]를 1로 갱신한다.ground[sy][sx]로 선언한다.y+dy[i], x+dx[i]로 선언한다.visited[ny][nx]가 0이고, ground[y][x]-ground[ny][nx]의 절댓값이 l 이상, r 이하일 경우,visited[ny][nx]를 1로 갱신한다.ground[ny][nx]를 더한다.(ny, nx)를 넣는다.(ny, nx)를 넣는다.ground[i][j]를 total//len(cnt)로 갱신한다.n*n 크기로 선언하고 0으로 채운다.visited[i][j]가 0일 경우,bfs(i, j)를 호출한다.from collections import deque
from copy import deepcopy
n, l, r=map(int, input().split())
ground=[list(map(int, input().split())) for _ in range(n)]
dy, dx=[1, 0, -1, 0], [0, 1, 0, -1]
def bfs(sy, sx):
q=deque()
q.append((sy, sx))
visited[sy][sx]=1
total=ground[sy][sx]
cnt=[(sy, sx)]
while q:
y, x=q.popleft()
for i in range(4):
ny, nx=y+dy[i], x+dx[i]
if 0<=ny<n and 0<=nx<n and not visited[ny][nx] and l<=abs(ground[y][x]-ground[ny][nx])<=r:
visited[ny][nx]=1
total+=ground[ny][nx]
cnt.append((ny, nx))
q.append((ny, nx))
for i, j in cnt:
ground[i][j]=total//len(cnt)
answer=0
while True:
tmp=deepcopy(ground)
visited = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
if not visited[i][j]:
bfs(i, j)
if tmp!=ground:
answer+=1
else:
break
print(answer)
