괄호닫기 문제 질문 mismatched bracket

  • 정여진
    정여진

    입력 받은 문자열에서 괄호의 갯수가 홀수인지 확인하고 홀수일때 no
    "({[" 괄호가 입력될 때에는 push에 넣고, 닫는 괄호가 입력 될 때에는 (push가 없고 닫힐 때 no)짝이 맞는 경우와 아닌 경우로 나눠서
    짝이 맞지 않을 때 no 짝이 맞는 경우는 pop.

    그리고 마지막에 stack이 비어있지 않으면 no

    이런식으로 검사를 하는데,틀린 예제가 무엇인지 모르겠습니다!!

    #include <iostream>
    #include <string>
    #include <stack>
    
    using namespace std;
    
    int main(){
        int num;
        cin >> num;
        string input;
        string opening("({[");
        string closing(")}]");
    
        //괄호 여는 부분이면 push()
        //닫는 부분이면 pop()
        for (int j = 0; j < num; j++){
            cin >> input;
            stack<char> in;
            bool check = false;
            if (input.size() % 2 == 1){ //홀수
                cout << "NO" << endl;
                continue;
            }
            for (int i = 0; input[i] != '\0'; i++){
                //여는 거일때
                if (opening.find(input[i]) != -1){
                    in.push(input[i]);
                }//닫는거 일때
                else {
                    //짝이 안맞을 때
                    if (in.empty()){
                        cout << "NO" << endl;
                        check = true;
                        break;
                    }
                    if (opening.find(in.top()) != closing.find(input[i])){
                        cout << "NO" << endl;
                        check = true;
                        break;
                    }
                    //짝이 맞는 경우
                    in.pop();
                }
            }
            if (!in.empty()){
                cout << "NO" << endl;
            }
            else if (!check){
                cout << "YES" << endl;
            }
        }
        return 0;
    }
    
    ~~~ c++
    

    8년 전
1개의 댓글이 있습니다.
  • Toivoa
    Toivoa

    NO가 두번 출력되는 케이스가 있습니다.


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