Algorithm Problems

[백준][Python] 16234번 인구 이동 - BFS

WakaraNai 2022. 2. 5. 20:54
728x90
반응형

https://www.acmicpc.net/problem/16234

 

16234번: 인구 이동

N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모

www.acmicpc.net

 

from collections import deque
import sys
input = sys.stdin.readline
dx = [0,0,1,-1]
dy = [1,-1,0,0]

N, L, R = map(int, input().split())
arr = [ list(map(int, input().split())) for _ in range(N) ]
if N == 1:
    print(0)
    sys.exit(0)

answer = 0


nextTurn = True

while nextTurn: 
    nextTurn = False
    visit = [[False]*N for _ in range(N)]
    road = []

    for i in range(N):
        for j in range(N):
            if visit[i][j]:
                continue
                
            q = deque([(i,j)])
            visit[i][j] = True
            total = arr[i][j]
            road.append([(i,j)])
            while q:
                x, y = q.popleft()

                for t in range(4):
                    nx = x + dx[t]
                    ny = y + dy[t]
                    if 0<=nx<N and 0<=ny<N:
                        if not visit[nx][ny] and L <= abs(arr[nx][ny]-arr[x][y]) <= R:
                            visit[nx][ny] = True
                            q.append((nx,ny))
                            total += arr[nx][ny]
                            road[-1].append((nx,ny))
                
            if len(road[-1]) > 1:
                road[-1].append(total // len(road[-1]))
                nextTurn = True
                #print(road)
            else:
                visit[i][j] = False


    if nextTurn:
        answer += 1
        for r in road:
            people = r.pop()
            for x, y in r:
                arr[x][y] = people
        #print(arr)
        #del road : 시간초과 유발범

print(answer)

 

 

 

풀이 과정

여러군데에서 시작되는 경우에 곧바로 arr에 업데이트하면 최근 값이 세팅되어 잘못 계산된다

그래서 한 번 진행될 때마다 road 리스트에 한 줄씩 추가하며 진행했다

arr.copy()를 안 쓰려고 그랬다

728x90
반응형

'Algorithm Problems' 카테고리의 다른 글

[백준][Python] 15638번 감시 - 재귀  (0) 2022.02.12
[백준][Python] 2293번 동전1 - DP  (0) 2022.01.22
Binary Search  (0) 2021.12.26
Dynamic Programming  (0) 2021.12.26
DFS/BFS(2차원) 설명  (0) 2021.10.24