성우리뷰
징검다리건너기
두원공대88학번뚜뚜
2021. 5. 27. 19:57
#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;
}