-
[Algorithm] C++ 마구간 정하기(이분검색)Programming/Algorithm 2019. 12. 23. 17:29
입력설명
첫 줄에 자연수 N(3<=N<=200,000)과 C(2<=C<=N)이 공백을 사이에 두고 주어집니다. 둘째 줄부터 N개의 줄에 걸쳐 마구간의 좌표 xi(0<=xi<=1,000,000,000)가 한 줄에 하나씩 주어집니다.
출력설명첫 줄에 가장 가까운 두 말의 최대 거리를 출력하세요.
입력예제
5 3
1 2 8 4 9
출력예제
3
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<algorithm> using namespace std; int n; int Count(int len, int x[]) { int i, cnt = 1, pos = x[1]; for (i = 2; i <= n; i++) { if (x[i] - pos >= len) { cnt++; pos = x[i]; } } return cnt; } int main() { int m, i, lt = 1, rt, mid, res; scanf("%d %d", &n, &m); int* x = new int[n + 1]; // 동적 배열로 선언 , 200000을 선언하기엔 너무 크기 때문! for (i = 1; i <= n; i++) { scanf("%d", &x[i]); } sort(x + 1, x + n + 1); rt = x[n]; while (lt <= rt) { mid = (lt + rt) / 2; if (Count(mid, x) >= m) { res = mid; lt = mid + 1; } else rt = mid - 1; } printf("%d\n", res); return 0; }
'Programming > Algorithm' 카테고리의 다른 글
[Algorithm] C++ 봉우리(2차원 배열) (0) 2019.12.26 [Algorithm] C++ 멀티태스킹(카카오 먹방 문제 변형, 시뮬레이션) (0) 2019.12.25 [Algorithm] C++ 공주 구하기(조세퍼스) (0) 2019.12.23 [Algorithm] C++ 뮤직비디오(이분검색) (0) 2019.12.23 [Algorithm] C++ 이분검색 (0) 2019.12.23