https://school.programmers.co.kr/learn/courses/30/lessons/340212
이분탐색 쓸 생각 못했었는데 적용하는 계기가 되었다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool Possiblelevel(int level, vector<int> diffs, vector<int> times, long long limit)
{
long long time_cur = times[0], time_prev = 0;
long long result = 0;
for (int i = 0; i < diffs.size(); i++)
{
if (i != 0)
{
time_cur = times[i];
time_prev = times[i-1];
}
long long repetition = diffs[i]- level;
if (repetition > 0)
{
result += (time_cur + time_prev) * repetition + time_cur;
} else
{
result += time_cur;
}
}
if (result > limit) return false;
return true;
}
long long solution(vector<int> diffs, vector<int> times, long long limit) {
long long left = 1, right = diffs[0];
for (int i = 0; i < diffs.size(); i++)
{
if (right < diffs[i])
right = diffs[i];
}
while (left <= right)
{
long long mid = (left + right) / 2;
if (Possiblelevel(mid, diffs, times, limit))
{
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
'콘솔창 & 윈도우창 > 코딩 테스트' 카테고리의 다른 글
[백준 실버5] 수들의 합5 2018 (1) | 2024.10.07 |
---|---|
[백준 실버1] 구간 합 구하기 5 11660번 (1) | 2024.09.28 |
프로그래머스 - Lv.1 동영상 재생기 (0) | 2024.09.23 |
프로그래머스 LV.1 폰켓몬 (0) | 2024.08.17 |
프로그래머스 - LV.1 [1차] 비밀지도 (0) | 2024.08.15 |