BRACKETS2 - 시간초과

  • skylife927
    skylife927

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

    #include <iostream>
    
    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;
    }
    

    8년 전
3개의 댓글이 있습니다.
  • skylife927
    skylife927

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


    8년 전 link
  • kcm1700
    kcm1700

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


    8년 전 link
  • skylife927
    skylife927

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


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