코테

[Codility] Peaks C++

29도 맑음 2022. 1. 9. 18:34
반응형

많이 헤맸던 문제

조건이 너무 어려웠다 특히 N으로 나눠 떨어져야한다는 그것이....

영어라 내가 이해 못하는건지 설명을 제대로 안해준건지...

int solution(vector<int> &A) {
    int N = A.size();
    int answer = 0;
    vector<int> peak;
    for(int i=1; i<A.size()-1; i++){
        if(A[i-1]<A[i] && A[i+1]<A[i]){
            peak.push_back(i);
        }
    }
    for(int i=1; i<=N; i++){
        if(N%i!=0)  continue;
        int now = i;
        bool exist = false;
        for(int j=0; j<peak.size(); j++){
            if(peak[j]<now){
                exist = true;
            }
            else{
                if(exist){
                    now+=i;
                    exist = false;
                    j--;
                }else{
                    break;
                }
            }
        }
        if(now!=N)  continue;
        if(exist)   return now/i;
    }
    return answer;
}

 

더보기

이건 왜 안될까..

vector<int> peak;
int answer = 1;
int N;

void binarySearch(int s, int e){
    if(s>e) return;
    int mid = (s+e)/2;
    int now = mid;
    bool exist = false;
    for(int i=0; i<peak.size(); i++){
        if(peak[i]<now){
            exist = true;
        }
        else{
            if(exist){
                now+=mid;
                exist = false;
                i--;
            }else{
                binarySearch(mid+1, e);
                return;
            }
        }
    }
    if(N==now)
        answer = now/mid;
    binarySearch(s, mid-1);
    return;
}

int solution(vector<int> &A) {
    N = A.size();
    for(int i=1; i<A.size()-1; i++){
        if(A[i-1]<A[i] && A[i+1]<A[i]){
            peak.push_back(i);
        }
    }
    if(!peak.size())    return 0;
    binarySearch(0,A.size());
    return answer;
}

 

반응형