BOJ 8014 Island

BOJ 8014 Island

문제 링크:

문제 내용

nn개의 정점을 갖는 원형의 그래프가 주어집니다. 1번 정점과 2번 정점, 2번 정점과 3번 정점, …, nn번 정점과 1번 정점이 연결되어 있습니다.

각 간선의 거리가 주어질 때, 서로 가장 멀리 떨어져 있는 두 정점 간의 거리를 구하세요.

입력

첫 번째 줄에는 정점의 개수 nn이 주어집니다. (2n50  0002 \le n \le 50\;000)

두 번째 줄부터 nn줄에 걸쳐서, 1번 정점과 2번 정점 사이의 거리 a1a_1, 2번 정점과 3번 정점 사이의 거리 a2a_2, …, nn번 정점과 1번 정점 사이의 거리 ana_n이 주어집니다. 모든 값은 정수입니다. (1ai1091 \le a_i \le 10^9, ai109\sum a_i \le 10^9)

출력

문제의 정답을 출력합니다.

문제 풀이

스포일러

nn이 최대 5만이고 제한 시간이 3초이기 때문에, 빠른 언어로 가능한 각 시작점에 대한 누적합을 모두 구해보는 O(n2)\mathcal{O}(n^2) 코드가 아슬아슬하게 통과합니다.

O(n)\mathcal{O}(n)에 풀려면 투 포인터를 적용하여 다음과 같은 방법을 쓸 수 있습니다.

  • 먼저, 1번을 시작점으로 두고 구간을 오른쪽으로 확장하면서, 구간의 합이 전체 합의 절반을 초과하는 시점에서 멈춥니다.
  • 그 과정에서 나오는 두 끝점 사이의 최단거리를 모두 구해서 그 중에서 최댓값을 저장합니다.
  • 이제 시작점을 한 칸씩 오른쪽으로 움직이면서, 구간의 합이 전체 합의 절반 이하가 되면 오른쪽을 움직이는 것을 반복하며, 그 과정에서 만난 모든 최단거리를 이용하여 답을 업데이트합니다.
Last updated on