밍나인 2020. 8. 19. 18:00

기본적인 삼분탐색 문제, 처음엔 단순 이분법 parametric search로 푸는 문제인줄 알고 한참을 고민했다. 

삼분탐색으로 풀 생각을 하고 삼분탐색에 대해 살짝 맛을 봤더니 삼분탐색도 이분탐색으로 하는 방법이 있길래 풀어보았다.

삼분탐색에 대한 정리는 https://mingnine9999.tistory.com/34에 해두었다.

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

 

8986번: 전봇대

입력의 첫 줄은 전봇대의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 두 번째 줄에는 전봇대의 위치를 나타내는 N개의 서로 다른 x-좌표 xi(i = 0, ..., N-1)가 빈칸을 사이에 두고 오름차순으로 주어진다. xi는

www.acmicpc.net

전봇대들을 모두 같은 거리만큼 떨어져 있도록 옮겨야 하는데, 가장 최소로 움직이는 거리를 찾아야 하는 문제이다.

전봇대가 모두 같은 거리만큼 떨어져 있어야 하므로 두 전봇대사이의 거리를 x, 그 거리로 모두 이동하는데 움직이는 거리를 y로 하는

함수의 최솟값을 찾는 문제로 생각하면 쉽다. f(x) < f(x + 1) 인 최소의 x를 찾으면 되는데, 이 값을 이분탐색으로 찾아주기만 하면 

풀리는 문제..!! 덕분에 삼분탐색에 대해서도 고민하고 괜찮은 문제인 것 같다.

https://github.com/MingNine9999/algorithm/blob/master/Problems/boj8986.cpp

 

MingNine9999/algorithm

Contribute to MingNine9999/algorithm development by creating an account on GitHub.

github.com