n x n 표에서의 분배
- 문제 유형 : DFS
- 사용언어 : Python
- 난이도 : 실버 1
- 출처 : 코드 트리
from collections import deque
import sys
# 입력 받기
n, L, R = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(n)]
def bfs(x, y, visited, grid, n, L, R):
directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]
queue = deque([(x, y)])
component = []
component.append((x, y))
visited[x][y] = True
while queue:
cx, cy = queue.popleft()
for dx, dy in directions:
nx, ny = cx + dx, cy + dy
if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny]:
if L <= abs(grid[cx][cy] - grid[nx][ny]) <= R:
visited[nx][ny] = True
queue.append((nx, ny))
component.append((nx, ny))
return component
def process(grid, n, L, R):
visited = [[False]*n for _ in range(n)]
components = []
for i in range(n):
for j in range(n):
if not visited[i][j]:
comp = bfs(i, j, visited, grid, n, L, R)
if len(comp) > 1:
components.append(comp)
for comp in components:
total_population = sum(grid[x][y] for x, y in comp)
new_value = total_population // len(comp)
for x, y in comp:
grid[x][y] = new_value
return len(components) > 0
count = 0
while True:
if not process(grid, n, L, R):
break
count += 1
print(count)
반응형
'Programming Test > 문제풀이' 카테고리의 다른 글
[문제 풀이 26] 프로그래머스 - 숫자변환 (0) | 2024.09.04 |
---|---|
[문제 풀이 25] 코드 트리 - 특정 조건에 따라 줄 세우기 (0) | 2024.04.28 |
[문제 풀이 23] 코드 트리 - n x m 표 이동 5 (0) | 2024.04.23 |
[문제 풀이 22] 코드 트리 - 색맹 (0) | 2024.04.22 |
[문제 풀이 21] 프로그래머스 - 완주하지 못한 선수 (0) | 2024.04.20 |