KWPATTERN 문제 오답질문입니다.

  • kun452
    kun452

    문제 테스트 케이스는 제대로 돌아가는데 오답으로 뜨네요..
    윤년은 일 만 관련있는데 성시가 되기 위해서는 일의 두개의 자리는 같은 것만 와야되므로 윤년은 생각하지 않았습니다.

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    string A[10001];
    
    string Func2(string a){ // a다음 것
        if(a[4] == '0'){
            if(a[5] == '1'){
                if(a[6] == '1' && a[7] == '1'){
                    a[6] = '2';
                    a[7] = '2';
    
                    return a;
                }
                else if(a[6] == '2' && a[7] == '2'){
                    a[5] = '2';
    
                    a[6] = '1';
                    a[7] = '1';
                    a[8] = '2';
                    return a;
                }
            }
            else if(a[5] == '2'){
                if(a[6] == '1' && a[7] == '1'){
                    a[6] = '2';
                    a[7] = '2';
    
                    return a;
                }
                else if(a[6] == '2' && a[7] == '2'){
                    a[4] = '1';
                    a[5] = '0';
    
                    a[6] = '1';
                    a[7] = '1';
                    a[8] = '0';
                    a[9] = '1';
    
    
                }
            }
        }
    
        else if(a[4] == '1'){
            if(a[5] == '0'){
                if(a[6] == '1' && a[7] == '1'){
                    a[6] = '2';
                    a[7] = '2';
    
                    return a;
                }
                else if(a[6] == '2' && a[7] == '2'){
                    a[5] = '1';
    
                    a[6] = '1';
                    a[7] = '1';
                    a[8] = '1';
    
                    return a;
                }
            }
            else if(a[5] == '1'){
                if(a[6] == '1' && a[7] == '1'){
                    a[6] = '2';
                    a[7] = '2';
    
                    return a;
                }
                else if(a[6] == '2' && a[7] == '2'){
                    a[5] = '2';
    
                    a[6] = '1';
                    a[7] = '1';
                    a[8] = '2';
    
                    return a;
                }
            }
            else if(a[5] == '2'){
                if(a[6] == '1' && a[7] == '1'){
                    a[6] = '2';
                    a[7] = '2';
    
                    return a;
                }
                else if(a[6] == '2' && a[7] == '2'){
                    a[3] = a[3] + 1;
                    a[4] = '0';
                    a[5] = '1';
    
                    a[6] = '1';
                    a[7] = '1';
                    a[8] = '1';
                    a[9] = '0';
                    a[10] = a[3];
    
                }
            }
        }
    
        if(a[3] >= '6'){
            a[2] = a[2] + 1;
            if(a[2] == 58){
                a[2] = '0';
                a[1] = a[1] + 1;
                if(a[1] == 58){
                    a[1] = '0';
                    a[0] = a[0] + 1;
                }
            }
    
            a[3] = '0';
            a[10] = a[3];
            a[11] = a[2];
            a[12] = a[1];
            a[13] = a[0];
        }
    
        return a;
    }
    
    string Func(int n){
        if(A[n] != ""){
            //cout << " dfdf " << endl;
            return A[n];
        }
    
        //cout << "Dfd " << endl;
        string a = "";
        int i;
        for(i= n; i>0; i--){
            if(A[i] != ""){
                a = A[i];
                break;
            }
        }
    
        int N = n - i;
    
        int j = i;
        for(i = 1; i<=N; i++){
            //cout << a << endl;
            a = Func2(a);
            j++;
            A[j] = a;
        }
    
        return A[n];
    }
    
    int main(){
        int num;
        cin >> num;
    
        for(int i=0; i<10001; i++)
            A[i] = "";
    
    
        A[1] = "20000111100002";
    
        for(int i=0; i<num; i++){
            int n;
            cin >> n;
    
            string k = Func(n);
            cout << k.substr(0, 4) << "-" << k.substr(4,2) << "-" << k.substr(6, 2) << " " << k.substr(8,2) << ":" << k.substr(10, 2) << ":" << k.substr(12) << endl;
        }
    
        return 0;
    }
    

    10년 전
1개의 댓글이 있습니다.
  • Being
    Being

    이런 식으로 경우의 수를 일일이 나누어 구현하면, 질문해 주신 분도 그렇고 코드를 읽는 사람의 경우도 그렇고 로직을 전혀 파악할 수 없습니다. 꼭 이렇게 해야겠다고 하시면 말리지는 않겠습니다만 조금 더 일반적인 방법으로 해결하시기를 권합니다.


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