BRACKETS2 질문

  • 람지
    람지

    문제

    BRACKETS2

    코드

    #include <iostream>
    #include <stack>
    #include <string>
    
    using namespace std;
    
    bool decide(const string& str) {
        stack<char> brakets;
        int strLen = str.length();
    
        for (int i = 0; i < strLen; i++) {
            char current = str.at(i);
    
            if (current == '(' || current == '{' || current == '[')
                brakets.push(current);
    
            else if (current == ')' || current == '}' || current == ']') {
                if (brakets.empty())
                    return false;
    
                if (current == ')' && brakets.top() == '(')
                    brakets.pop();
                else if (current == '}' && brakets.top() == '{')
                    brakets.pop();
                else if (current == ']' && brakets.top() == '[')
                    brakets.pop();
                else
                    return false;
            }
        }
    
        if (brakets.empty())
            return true;
        //else 
            //return false;
    }
    
    int main() {
        int c;
        cin >> c;
    
        for (int tc = 0; tc < c; tc++) {
            string str;
            cin >> str;
    
            if (decide(str))
                cout << "YES\n";
            else
                cout << "NO\n";
        }
        return 0;
    }
    

    decide 함수 마지막 부분 주석처리한 두 줄 주석 해제 하면 정답이 나옵니다.
    근데 저 부분을 주석처리 했을때 오답이 뜨는 이유가 궁금합니다.

    저부분 조건문을 참으로 통과하려면

    • 빈 stack에 닫힌 괄호를 넣는 경우가 아니여야 함 (즉시 return 되므로)
    • 닫힌 괄호일때 stack에 있는 열린 괄호에 대응되지 않는 경우가 아니여야 함 (즉시 return 되므로)
    • 비어있는 stack이 아니여야 함

      이 조건을 모두 만족해야되는데 이런 테스트케이스가 도저히 떠오르지 않습니다. 어떤 테스트케이스틑 통과 못한것인지 궁금합니다...ㅠ


    4년 전
2개의 댓글이 있습니다.
  • cadenzah
    cadenzah

    열린 괄호만 존재하는 경우를 위한 것 아닌가요?

    ((

    이런 경우처럼요.


    4년 전 link
  • 람지
    람지

    아 그걸 왜 생각 못했을까요... 감사합니다 :)


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