#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int sub(vector<int> stones, int mid, int k) {
int flag = true;
int less = 0;
for(int i=0; i<stones.size(); i++) {
//s[i] <= mid일 때, 건널 수 있음. 따라서, 초기화됨
if(mid <= stones[i]) {
less = 0;
}
//건널 수 없음
else {
//건널 수 없는 만큼 더하고, 만약 이게 k번 반복되면 fasle 리턴
less++;
if(less >= k) return false;
}
}
return true;
}
int solution(vector<int> stones, int k) {
int answer = 0;
int left = *min_element(stones.begin(), stones.end());
int right = *max_element(stones.begin(), stones.end());
int mid;
while(left <= right) {
mid = (int)(left + right)/2;
//만약 1이라면, mid만큼의 학생은 건널 수 있는거임
if(sub(stones, mid, k)) {
left = mid+1;
answer = mid;
}
//아니라면, mid보다 더 적은 학생이 건널 수 있음
else {
right = mid - 1;
}
}
return answer;
}
'성우리뷰' 카테고리의 다른 글
구명보트 (0) | 2021.07.14 |
---|---|
입국심사 (with java) (0) | 2021.07.12 |
매출하락 최소화 (2) | 2021.05.26 |
임시 공부용 (1) | 2021.05.24 |
sw 문제 모의 역량테스트) 보물상자 비밀번호 (0) | 2021.05.13 |