:pencil2: 코드

import sys
# sys.stdin = open("input.txt")
input = sys.stdin.readline
from collections import deque

def solve(i, j):
    q = deque()
    q.append((i, j))
    union = []
    total = 0
    while q:
        r, c = q.popleft()
        union.append((r, c))
        total += arr[r][c]
        for k in range(4):
            nr = r + dr[k]
            nc = c + dc[k]
            if 0 <= nr < N and 0 <= nc < N and not visited[nr][nc]:
                if L <= abs(arr[nr][nc] - arr[r][c]) <= R:
                    q.append((nr, nc))
                    visited[nr][nc] = True

    avg = total // len(union)
    for r, c in union:
        arr[r][c] = avg
    return len(union)


N, L, R = map(int, input().split())
arr = [list(map(int, input().rstrip().split())) for _ in range(N)]

dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
cnt = 0

while True:
    check = False
    visited=[[False] * N for _ in range(N)]
    for r in range(N):
        for c in range(N):
            if not visited[r][c]:
                visited[r][c] = True
                if solve(r, c) > 1:
                    check = True
    if not check:
        break
    else:
        cnt += 1

print(cnt)

:star:풀이

bfs 함수를 여러번 호출해야하는 문제였다. 인구 이동이 완전이 멈출 때까지 탐색 후 더이상 이동이 불가능할 경우 종료한다. 오늘도 역시 오전 8시부터 알고리즘 문제풀이를 진행했다!! 평소같았으면 긴장감 없이 문제를 풀기때문에 문제에 대한 집중도가 떨어졌을텐데 다같이 시간제한을 두고 푸니깐 몰입도가 확 올라가서 정말 좋은 것 같다. 내일도 화이팅이당!!

댓글남기기