중간값을 기준으로 반씩 나눠서 탐색하기 때문입니다.
예를 들어서
1 2 2 3 4 4 4 7 8 9 가 있다고 칩시다.
여기서 5보다 큰 최초의 위치를 찾는다고 해 볼까요?
mid는 4이므로
1 2 2 3 [4] 4 4 7 8 9 일 겁니다.
여기서 4는 5보다는 작잖아요.
그러니까 우측 구간에서 찾겠죠. 이렇게 이분탐색은 반씩 줄여가면서 찾습니다.
2110번 - 공유기 설치
중간값을 기준으로 반씩 나눠서 탐색하기 때문입니다.
예를 들어서
1 2 2 3 4 4 4 7 8 9 가 있다고 칩시다.
여기서 5보다 큰 최초의 위치를 찾는다고 해 볼까요?
mid는 4이므로
1 2 2 3 [4] 4 4 7 8 9 일 겁니다.
여기서 4는 5보다는 작잖아요.
그러니까 우측 구간에서 찾겠죠. 이렇게 이분탐색은 반씩 줄여가면서 찾습니다.
그렇게 이해하시면 더 헷갈리실 겁니다.
일단 f(x)를 요래 정해봅시다.
공유기간의 거리 중 최소 거리가 x 이상이여야 할 때 공유기 몇 개를 설치할 수 있을까?
1 2 4 8 9
에서 만약에 x가 4라면 이렇게 설치해야 합니다.
(1) 2 4 (8) 9
1 다음에 4에다가 설치하면 곤란하겠죠?
x가 3이라면 이렇게 설치할 수 있겠죠.
(1) 2 (4) (8) 9
x가 2라면 이렇게 설치 가능합니다.
(1) 2 (4) (8) 9
결국 이 f(x)가 감소, 또는 증가 함수네요. 이분 탐색 적용 가능하겠지요?
댓글을 작성하려면 로그인해야 합니다.
d252b 6년 전
이분 탐색 이므로 중간값으로 비교해서
start = mid+1 혹은 end= mid -1 로 하는 것은 자명한데요.
궁금한 점은
집이
1 2 4 8 9 로 주어질 때
그 이분탐색하는 기준점(mid)가 왜 (1+9)/2 가 되어야 하나요?
현재 우리는 공유기가 설치되는 '거리' 의 최댓값을 찾고 있는 것인데
그 공유기간 거리의 최댓값과 주어진 집 사이의 거리에서의 중간값과 관련이 있나요?
* 저는 아래 코드처럼 작성하였으나 시간초과가 떴습니다.