1.실패 원인
조건 하나를 빠트렸고, 이분탐색을 활용하지 않아서 시간초과가 났다. 랜선의 개수가 정확히 떨어지지 않아도 그 보다 많이 만드는 경우도 답이기에 조건 설계에서 실수를 했다. 이분 탐색 문제를 몇 번 풀어봤으면 아마 쉽게 답을 맞추지 않았을까 생각을 한 것이, 접근 방법은 추론했기 때문이다.
2.작성 코드
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 10000;
long long line[MAX];
int n, k;
bool possible(long long int len) {
int cnt = 0;
for (int i = 0; i < n; i++) {
cnt += line[i] / len;
}
if (cnt >= k)
return true;
return false;
}
int main() {
cin >> n >> k;
long long int high = 0;
for (int i = 0; i < n; i++) {
cin >> line[i];
high = max(line[i], high);
}
long long int result = 0;
long long low = 1;
while (low <= high) {
long long int mid = (low + high) / 2;
if (possible(mid)) {
if (result < mid) {
result = mid;
}
low = mid + 1;
}
else
high = mid - 1;
}
cout << result << endl;
}
3.참고 코드
https://jaimemin.tistory.com/964
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
백준 2110. 공유기 설치 [실패] (0) | 2020.07.28 |
---|---|
백준 2805. 나무 자르기[성공] (0) | 2020.07.28 |
백준 1967. 트리의 지름 [성공] (0) | 2020.07.27 |
백준 1167. 트리의 지름 [실패] (0) | 2020.07.23 |
백준 11725. 트리의 부모 찾기[실패] (0) | 2020.07.23 |