# 본인 풀이 (실패)

#include<bits/stdc++.h>
using namespace std;
string a = "";

// 괄호 내에서도 짝이 맞는지 확인
bool check(string str){
    stack<char> stk;

    for(char chr: str){

        if (stk.size() && (stk.top() == ']' || stk.top() == ')'))
        {
            return false;
        }

        if((stk.empty() && chr == ')') || (stk.empty() && chr == ']')){
            return false;
        }

        if(stk.size() && stk.top() == '(' && chr == ')'){
            stk.pop();
        }

        if(stk.size() && stk.top() == '[' && chr == ']'){
            stk.pop();
        }


        if(chr == '[' || chr == '('){
            stk.push(chr);
        }
    }

    if (stk.empty())
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    while(true){
        getline(cin, a);
        if(a == "."){
            break;
        }
        if(check(a)){
            cout << "yes"
                 << "\n";
        }else{
            cout << "no"
                 << "\n";
        }
    }

    return 0;
}
  1. 반례 - [(]
  2. 닫는괄호를 확인하는 시점에 대한 코드가 불안정했음. ifelse 분기처리해서 푸시 직전에 top을 확인하여 짝짓기하도록 코드를 개선해야 했음

# 모범 답안

#include<bits/stdc++.h>
using namespace std;
string a = "";

// 괄호 내에서도 짝이 맞는지 확인
bool check(string str){
    stack<char> stk;

    for(char chr: str){
        if(chr == ']'){
            if(stk.empty()){
                return false;
            }

            if(stk.size() && stk.top() == '('){
                return false;
            }else{
                stk.pop();
            }
        }else if(chr == ')'){
            if(stk.empty()){
                return false;
            }

            if(stk.size() && stk.top() == '['){
                return false;
            }else{
                stk.pop();
            }
        }

        if(chr == '(' || chr == '['){
            stk.push(chr);
        }
    }

    if (stk.empty())
    {
        return true;
    }
    else
    {
        return false;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    while(true){
        getline(cin, a);
        if(a == "."){
            break;
        }
        if(check(a)){
            cout << "yes"
                 << "\n";
        }else{
            cout << "no"
                 << "\n";
        }
    }

    return 0;
}