https://www.acmicpc.net/problem/3079
이 문제의 경우 아마도 프로그래머스 고득점 알고리즘 키트해도 비슷한 문제가 수록 되있을 것이다 단 백준에서는 매우 큰수까지의 비교를 하기 때문에 자료형에 unsinged long long을 해줌으로 범위를 널널 하게 잡아줘야 한다
이 문제의 경우는 각 테이블 마다 특정 시간을 주고 해당 시간 동안 몇명의 인원수를 상대할 수 있는 지를 더해서 친구들의 수와 같으면 정답이게 출력을 해주면 되지만 해당 조건을 만족하는 더 작은 수가 있을 수 있다
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
unsigned long long n, m;
vector <unsigned long long > times;
cin >> n >> m;
for (int i = 0; i < n; i++) {
unsigned long long tmp1;
cin >> tmp1;
times.push_back(tmp1);
}
sort(times.begin(), times.end());
unsigned long long answer = 0;
unsigned long min = 1;
unsigned long long max = m * times.back();
while (min <= max) {
unsigned long long tmp = 0;
unsigned long long avg = (min + max) / 2;
for (unsigned long long i = 0; i < n; i++) {
tmp += avg / times[i];
}
if (tmp < m) {
min = avg + 1;
}
else {
max = avg - 1;
answer = avg;
}
}
cout << answer;
}
'백준(코테준비) > 이분탐색' 카테고리의 다른 글
백준 1253 / CPP / 이분탐 (0) | 2025.01.13 |
---|---|
백준 12738 (1) | 2024.12.02 |