반응형

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

 

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

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

programmers.co.kr

 

각 원소 값의 범위를 보고 이분탐색을 이용한 문제라는걸 알았습니다.

mid를 건널 수 있는 사람의 수로 보았습니다.

건널 수 있다면 왼쪽 범위를 좁혀주고, 건널 수 없다면 오른쪽 범위를 좁혀주었습니다.

stones에 r을 하나 넣은 이유는, (3 4 0 0 0)의 형태인 경우 마지막에 0으로 끝날 때의 거리 재기가 누락되기 때문에 최댓값을 넣어주었습니다.

#include <string>
#include <vector>
using namespace std;

bool isPossible(vector<int> stones, int num, int k) {
    int dist = 0, cur = 0;
    for(int i=0; i<stones.size(); i++) {
        if(stones[i] - num <= 0) cur++;
        else {
            if(dist < cur) dist = cur;
            cur = 0;
        }
    }
    return dist < k;
}

int solution(vector<int> stones, int k) {
    int l = 0;
    int r = 200000000;
    stones.push_back(r);
    while(l<=r) {
        int mid = (l+r)/2;
        if(isPossible(stones, mid, k)) l = mid + 1;
        else r = mid - 1;
    }
    return l;
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 : 멀리 뛰기  (0) 2021.11.13
프로그래머스 : 이중우선순위큐  (0) 2021.11.13
프로그래머스 : N-Queen  (0) 2021.11.13
프로그래머스 : 추석 트래픽  (0) 2021.11.13
프로그래머스 : 보행자 천국  (0) 2021.11.13

+ Recent posts