문제 출처
1. 문제설명
N*N
크기의 땅이 있고, 각 칸은 1x1
개의 칸으로 이루어져 있다.
- 각각의 땅
r
행 c
열에는 A[r][c]
명이 살고 있다.
- 인구 이동은 하루동안 진행되고, 방법이 없을 때까지 지속된다.
- 인접한 국경의 인구 차이가
L
명 이상 R명
이하라면, 인구 이동이 가능하고 이를 연합이라 부른다.
- 연합을 이루는 각 칸의 인구 수는
연합의 인구수 / 연합을 이루는 칸의 개수
로 갱신된다.
- 연합을 해체하고, 국경선을 닫는다.
- 인구 이동이 며칠 동안 발생하는지 구하라
2. 알고리즘 설계
- BFS 기법을 이용해 연합이 만들어지는지 탐색한다.
- 연합이 만들어진다면, 위에 언급된 계산 방식으로 칸의 인구 수를 갱신한다.
- 연합이 만들어지지 않았다면, 종료 조건이 된다.
- 코드에 상세한 주석을 작성하였다.
3. 전체 코드
4. 소감
- 어떻게 하면 인구 이동이 없을 때까지 루프를 돌릴 수 있을까 고민했던 문제이다.
- 종료 조건이 어느 시점이 되면 찾아오는 게 아니라, 값의 변화에 따라 찾아오기 때문에 구현법이 빠르게 떠오르지 않았다.