티스토리 뷰
https://www.acmicpc.net/problem/16234
16234번: 인구 이동
N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모
www.acmicpc.net
[0][0] 국가부터 차례대로 bfs 알고리즘으로 인접한 국가를 탐색한다.
인접한 국가와의 인구 차이가 범위 이내라면 이동하면서 큐에 푸쉬 and 방문 기록 한다.
이렇게 bfs 알고리즘을 한 번 수행하면 탐색 시작한 국가에서 이동가능한 모든 국가들을 알 수 있고, 그 국가들의 집합이 연합이다. 따라서 연합인 국가들에 대하여 인구를 분배해주면 된다. (이동할때 좌표를 저장 한 후에, 이동 가능한 모든 국가가 나온 이후에 분배한다)
이후 아직 방문하지 않은 국가들을 대상으로 bfs 알고리즘을 반복해 수행한다.
만약 모든 국가들에 대하여 bfs 알고리즘을 수행했는데 인구 변경이 한번도 일어나지 않았다면 더이상 인구 이동이 불가능한 것이므로 종료하고, 한 번이라도 인구 변경이 일어났다면 일수를 증가시키고 다시 모든 국가들에 대하여 탐색한다.
'PS' 카테고리의 다른 글
| 백준 1987. 알파벳 (0) | 2022.04.02 |
|---|---|
| 백준 10026. 적록색약 (0) | 2022.04.02 |
| 백준 3055. 탈출 (0) | 2022.04.01 |
| 백준 2252. 줄 세우기 (0) | 2022.04.01 |
| 백준 1197. 최소 스패닝 트리 (0) | 2022.04.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C
- recursion
- Brute Force
- 이분탐색
- BFS
- Unity
- Tree
- Kruskal
- DP
- Stack
- floyd warshall
- back tracking
- graph
- Implementation
- CSS
- binary search
- priority queue
- Spring
- Dijkstra
- 조합
- dfs
- 자료구조
- permutation
- two pointer
- MVC
- greedy
- Python
- 재귀
- db
- C++
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함
