BRACKETS2 - 시간초과

  • User Avatar
    skylife927

    시간초과라고 자꾸 나오네요.
    어디서 간소화 해야할지 조언 부탁드립니다.
    ~~~ c++

    #include

    using namespace std;

    int mylength(char * arr){
    int i=0;
    while(arr[i] != '\0'){
    i++;
    }
    return i;
    }

    int main(int argc, char** argv)
    {
    int test_case;
    int T;

    cin >> T;
    for(test_case = 0; test_case < T; test_case++)
    {
        char stack[11000];
        int top = -1;
    
        char arr[11000];
        scanf("%s" , arr);
    
        int length = mylength(arr);
    
        bool result = true;
        // (, [, { 가 나오면 스택에 넣읍시다.
        // ), ], } 가 나오면 스택에서 뺀다음에 비교해서( )이면 (이 아닌 경우 false, ]인데 [이 안나오면 false, }인데 {이 안ㅇ나오면 false
        // result bool 변수 업데이트 해준다.
        // result bool 변수값을 보고 true이면 yes, false, 이면 no를 출력해준다.
        for(int i=0; i<length; i++){
    
            if(arr[i] == '(' || arr[i] == '[' || arr[i] == '{'){
                stack[++top] = arr[i];
            } else if(arr[i] == ')' ){
                char t = stack[top--];
                if(t != '(') result = false;
            } else if(arr[i] == ']'){
                char t = stack[top--];
                if(t != '[') result = false;
            } else if(arr[i] == '}'){
                char t = stack[top--];
                if(t != '{') result = false;
            }
        }
        if(top >=0 ) result = false;
        if(result){
            cout<<"YES"<<endl;
        } else {
            cout<<"NO"<<endl;
        }
    
    
    }
    
    return 0;
    

    }


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

    result = false일때 break;문이 빠졌네요. 해결했습니다.


    10년 전 link
  • User Avatar
    kcm1700

    그것보다 top이 음수가 되면 바로 루프를 나와줘야 합니다. stack을 음수 번지를 참고하고 있어요...


    10년 전 link
  • User Avatar
    skylife927

    아 그러네요.. 확인 감사합니다.


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