[BOJ16234] 인구 이동

Updated:

문제

  • NxN 크기 땅. 1x1칸엔 각 나라 존재
  • 인접한 나라 국경선 존재
  • 인구이동 조건
    • 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루동안 연다.
    • 위의 조건에 의해 열어야하는 국경선이 모두 열렸다면, 인구 이동을 시작한다.
    • 국경선이 열려있어 인접한 칸만을 이용해 이동할 수 있으면, 그 나라를 오늘 하루 동안은 연합이라고 한다.
    • 연합을 이루고 있는 각 칸의 인구수는 (연합의 인구수) / (연합을 이루고 있는 칸의 개수)가 된다. 편의상 소수점은 버린다.
    • 연합을 해체하고, 모든 국경선을 닫는다.
  • 각 나라 인구수 주어질 때, 인구이동 몇 번

입력

  • 첫째 줄 n(1<= <=50), l, r(1<= <=100)
  • 둘째 줄부터 각 나라 인구수

출력

  • 인구 이동이 몇 번 발생하는지 출력

설계

  • 그래프를 탐색하는 방식은 BFS 선정
  • 1,1 부터 n,n까지 전부 탐색하며, 인접한 칸이 l이상 r이하의 조건인 경우만 하나의 클러스터로 두고 평균 값 업데이트
  • Days 변수로 하루씩 체크하고, 변경이 없는 (인구 이동 없는) 날 이전까지 이동한 날짜 출력

피드백

  • 실수로 다음 노드 변수를 지정할 때 cx + dy[i] 적용해서 계속 틀림
  • 고쳐도 시간초과 (시간복잡도 고려 못 함) —> BFS로 클러스터를 확인했으면, 탐색 종료 후 바로 평균 값 업데이트

How I solved(click to github)


ref :
BOJ16234

Leave a comment