코테
[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;
}
반응형