MATCHORDER 자꾸 런타임 에러가나는데 RTE, SIGSEGV...

  • skylife927
    skylife927

    https://algospot.com/judge/problem/read/MATCHORDER
    RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)
    자꾸 오류가 나네요.
    stack을 사용한 것도 없고 범위를 벗어난 것도 없는데.. 흠..

    #include <iostream>
    
    using namespace std;
    
    #define MAX_N 110
    
    int N;
    int r[MAX_N];
    int k[MAX_N];
    int Result = 0;
    void swap(int a[], int left, int right){
        int temp = a[left];
        a[left] = a[right];
        a[right] = temp;
    }
    void quickSort(int a[], int left, int right){
        int pivot, i, j;
        if(left<right){
            i = left, j = right +1, pivot = a[left];
            do
            {
                do
                i++;
                while(a[i] < pivot);
                do
                j--;
                while(a[j] > pivot);
                if(i<j) swap(a, i, j);
            }while(i<j);
            swap(a, left, j);
            quickSort(a, left, j-1);
            quickSort(a, j+1, right);
        }
    }
    
    void judge(){
        // i, j
        // i : r의 index
        // j : k의 index
        int i,j;
        for(i=0,j=0; j<N;){
            if(r[i]> k[j]) j++;
            else if(r[i] <= k[j]) {
                i++, j++;
                Result++;
            }
        }
    }
    
    void init(){
        N=0;
        for(int i=0; i<MAX_N; i++)  r[i] = k[i] = 0;
        Result = 0;
    }
    
    int main(int argc, char** argv)
    {
        int test_case;
        int T;
    
        cin >> T;
        for(test_case = 0; test_case < T; test_case++)
        {
            init();
            cin>>N;
            for(int i=0; i<N; i++)  cin>>r[i];
            for(int i=0; i<N; i++)  cin>>k[i];
    
            quickSort(r, 0, N-1);
            quickSort(k, 0, N-1);
    
            judge();
            cout<<Result<<endl;
    
        }
    
        return 0;
    }
    

    8년 전
2개의 댓글이 있습니다.
  • seico75
    seico75

    다른 문제에서도 썼지만

    Quick 소트에서 pivot 이 전체 수열 중에서 가장 크면
    while(a[i] < pivot); 이 뚫고 나갈꺼 같네요..


    8년 전 link
  • skylife927
    skylife927

    감사합니다. i값이 뚫고 나갔네요.
    조건문 추가해서 맞췄습니다.
    감사합니다!


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.