#include <string>
#include <vector>
#include <queue>
using namespace std;
using vi = vector<int>;
vi g_, s_, w_, t_;
int a_, b_;
bool f(long long t) {
int n = g_.size();
long long a = 0, b = 0, c = 0;
for (int i = 0; i < n; ++i) {
long long q = t / t_[i];
q = (q + 1) / 2;
long long capacity = q * w_[i];
a += min((long long) g_[i], capacity);
b += min((long long) s_[i], capacity);
c += min((long long) (g_[i] + s_[i]), capacity);
}
if (c < a_ + b_) return false;
if (a < a_ || b < b_) return false;
return true;
}
long long solution(int a, int b, vector<int> g, vector<int> s, vector<int> w, vector<int> t) {
g_ = g, s_ = s, w_ = w, t_ = t;
a_ = a, b_ = b;
long long left = 0;
long long right = 4E14;
while (left < right) {
long long m = (left + right) / 2;
if (f(m)) right = m;
else left = m + 1;
}
return right;
}
반복 연산 처리 + 이진 탐색
역시나 해법공식을 찾는 게 아니다. 반복 수행이 답이다.
'알고리즘 > programmers' 카테고리의 다른 글
2021 KAKAO BLIND RECRUITMENT / 광고 삽입 (0) | 2022.11.27 |
---|---|
2022 KAKAO TECH INTERNSHIP 행렬과 연산 (0) | 2022.10.30 |
2022 KAKAO TECH INTERNSHIP / 코딩 테스트 공부 (0) | 2022.10.10 |
2022 KAKAO BLIND RECRUITMENT / 양궁대회 (0) | 2022.10.03 |
2022 KAKAO BLIND RECRUITMENT / 사라지는 발판 (0) | 2022.10.03 |