fkdlslss   3달 전

정해진 숫자까지 소수를 백터에 저장해두고 

start 변수와 finish변수를 각각두어 연속된 배열의 합들이 정해진 수가 되는지 판별하는 방법으로 코딩을하였는데 ...

런타임 에러가 뜨네요 .. 아무래도 백터 배열에 잘못된 배열접근때문에 발생하는거 같은데 찾지를 못하겠습니다 ㅠ

코드 한번 읽어주세여 ㅠㅠ 

grooming702   3달 전

vector<int> v;
    for(int i=2;i<=num;i++){
        if(check[i] == false){
            v.push_back(i);
        }
    }

위 부분에서  check[i] == false 인 i를 벡터에 넣어주고 있고, i는 무조건 num 보다 작거나 같네요


그런데 아래에서는  v[finish]>num 이 부분이 break 조건인듯한데 의미가 없겠네요..

v에는 num 보다 큰 수가 들어간 적이 없으니까요

while(1){

        if(sum >= num){
            sum -=v[start];
            start++;
        }else if(sum <num){
            sum+=v[finish];
            finish++;
        }
        if(sum == num){
            answer++;
        }
        if(v[finish]>num){
             
            break;
        }
         
    }


또 보면 어쩄건 sum은 num보다 작든, 크거나 같든 간에 둘 중 하나의 조건에는 항상 맞게 되므로 start, finish 중 하나는 늘 증가하게 되고

어느 시점이 되면 vector안에 들어있는 개수를 넘어서 번지접근을 하려고 하겠네요. 

알고리즘은 보지 않았고 런타임 에러의 이유만 확인했는데, 알고리즘도 다시 검토를 해보셔야 할 것 같네요~


fkdlslss   3달 전

grooming702 님

아 그렇네요 다시한번 수정해 보겠습니다 감사합니다.!!

댓글을 작성하려면 로그인해야 합니다.