#include <iostream>
#include <stack>
#include <map>
using namespace std;
bool isBalanced(string &s) {
stack<char> st;
map<char, char> m;
m[']'] = '[';
m[')'] = '(';
for (int i = 0; i < s.length(); i++) {
switch (s[i]) {
case '(': case '[':
st.push(s[i]);
break;
case ')': case ']':
if (st.empty() || st.top() != m[s[i]]) {
return false;
}
st.pop();
break;
}
}
return st.empty();
}
int main() {
string s;
while (getline(cin, s)) {
if (s == ".") {
break;
}
if (isBalanced(s)) {
cout << "yes\n";
} else {
cout << "no\n";
}
}
return 0;
}
- 매우 간단한 괄호 체크 문제!
- 이퍼에서도 몇번 나왔던거로 알고있다.
- 스택에 왼쪽 괄호를 넣고, 닫는 괄호가 나오면 스택에서 괄호를 빼는식!
- 만약 스택에 괄호가 남아있거나, 암것도 없는데 괄호를 빼려고 하는경우 잘못된거고,
잘 비워진 경우에는 성공한거로 판단해서 출력하면 된다!