입력값으로 들어오는 괄호가 아닌 문자는 모두 무시하고
괄호가 들어오면 스택의 맨 위를 확인해서 들어온 괄호문자와 짝이 지어지는지 확인한다.
짝이 맞다면 pop후 push는 안한다.
짝이 맞지 않다면 push만 한다.
마지막 문자까지 확인 후 스택에 값이 남아있다면 "no", 남아있지 않다면 "yes"를 출력해준다.
위와 같은 로직으로 "."이 입력될 때까지 반복해준다.
#include <bits/stdc++.h>
using namespace std;
string s;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
while(true){
getline(cin, s);
if(s == ".") return 0;
stack<char> st;
for(int i=0; i<s.size(); i++){
if(s[i] == '[' || s[i] == ']' || s[i] == '(' || s[i] == ')'){
if(st.size()){
if(st.top() == '[' && s[i] == ']') { st.pop(); continue; }
if(st.top() == '(' && s[i] == ')') { st.pop(); continue; }
}
st.push(s[i]);
}
}
if(st.size()) cout << "no\n";
else cout << "yes\n";
}
return 0;
}
스택을 생각하기도 쉬웠고 구현도 간단했다.