알고리즘 문제풀기/인프런 강의 정답
44. 마구간 정하기 (이분검색 응용 : 결정 알고리즘) [정렬 & 이분탐색(결정알고리즘) & 투포인트 알고리즘 & 스택]
코다람쥐
2022. 4. 15. 11:16
나의정답.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, horseNum, i, j, tmp, rt, lt, mid, cnt = 1, idx;
scanf("%d %d", &n, &horseNum);
vector<int> a(n);
// 마구간 번호 입력
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 마구간 번호 버블정렬
for (i = 0; i < n; i++) {
for (j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
lt = a[0];
rt = a[n - 1];
tmp = -1;
while (lt <= rt) {
mid = (lt + rt) / 2;
idx = 0;
cnt = 1;
for (i = 1; i < n; i++) {
if ( a[i] - a[idx] >= mid) {
idx = i;
cnt++;
}
}
if ( cnt >= horseNum ) {
lt = mid + 1;
tmp = mid;
}
else {
rt = mid - 1;
}
}
printf("%d", tmp);
}