알고리즘 문제 해결 전략문제 중 - LIS

  • User Avatar
    Jaekwan

    알고리즘 문제해결 전략 잘 보고 있습니다.

    오늘 LIS 부분을 해결하던 중 p.233에 동적계획법을 사용해 해법을 조금더 빠르게 바꾸는 부분이 있는데, 이 해법에 오류가 있는지 여쭈어 보고 싶습니다.
    cache를 꺼내는 부분만 있고 cache에 집어넣는 부분이 누락된 것 같아 말씀드립니다.

    그리고

    아래와 같이 소스를 만들어 보았는데 제출하면 오류가 나더군요. 본문에 있는 테스트 케이스는 잘 통과하고 이것 저것 혼자 만들어본 테스트 케이스도 잘 통과하는데 오류가 나서 도움을 구해 봅니다.


    ~~~ c++
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    using namespace std;
    #define MAX 501
    int N;
    int cache[MAX];
    int array[MAX];

    int readIntsToArray(string &s, int* array) {

    stringstream ss(s);
    int temp;
    int n = 0;
    
    while(ss>>temp) {
        array[n++] = temp;
    }
    
    return n;
    

    }

    int getMax(int start, int n) {

    if (cache[start] != -1) {
        return cache[start];
    }
    
    int ret = 1;
    for (int next = start +1 ; next < n; next++) {
        if (array[start] < array[next]) {
            ret += getMax(next, n);
            cache[start] = ret;
            break;
        }
    }
    
    return ret;
    

    }

    int solve(int n, int *array) {
    int maxLen = -1;

    for(int i = 0 ; i<n; i++){
        maxLen = max(getMax(i, n), maxLen);
    }
    
    return maxLen;
    

    }

    int main() {

    int el_len;
    string s;
    cin>>N;
    while(N--) {
    
        vector<int> v1;
    
        cin>>el_len;
        getline(cin,s);             // after cin, null line comes...
        getline(cin,s);
    
        // clear memory
        memset(cache, -1, sizeof(cache));
        memset(array, -1, sizeof(array));
    
        int n = readIntsToArray(s, array);
    
    
        cout<<solve(n, array)<<endl;
    }
    return 0;
    

    }
    ~~~


    12년 전
3개의 댓글이 있습니다.
  • User Avatar
    JongMan

    우선 첫번째 질문만 답변드리자면.. ret는 레퍼런스 타입입니다. ret의 값이 변하면 ret가 가리키는 cache내의 값도 변하죠.


    12년 전 link
  • User Avatar
    Jaekwan

    아! 레퍼런스 타입! 죄송합니다. c++로 넘어 온지 얼마 안되서 레퍼런스 타입에 대한 이해가 부족했군요!. 한 가지 배우고 갑니다!


    12년 전 link
  • User Avatar
    Jaekwan

    수열이 오름 차순이라고 잘못 생각하고 있었군요. 오류 확인 했습니다.


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