본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "징검다리 건너기"(level 3)

by 시아나 2022. 6. 3.

https://programmers.co.kr/learn/courses/30/lessons/64062

 

코딩테스트 연습 - 징검다리 건너기

[2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3

programmers.co.kr


#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

bool check(vector<int> &stones, int K, int mid) {
    int count = 0;
    for (int i = 0; i < stones.size(); i++) {
        if (stones[i] < mid) {
            count++;
        }
        else {
            count = 0;
        }
        if (count == K) return false;
    }
    return true;
}

int solution(vector<int> stones, int k) {
    int answer = 0;
    int left = 1, right = *max_element(stones.begin(), stones.end());
    while (left <= right) {
        int mid = (left + right) / 2;
        if (check(stones,k,mid)) {
            answer = mid;
            left = mid + 1;
        }
        else {
            right = mid - 1;
        }
    }
    return answer;
}