#include <iostream>
#include <stack>
using namespace std;
void fast_io(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
int main(void)
{
fast_io();
int k;
cin >> k;
cin.ignore();
for (int i = 0; i < k; i++)
{
string str;
getline(cin, str);
stack<char> st;
int ck = 0;
for (int i = 0; i < str.length(); i++)
{
if (str[i] == 40 || str[i] == 91)
{
st.push(str[i]);
}
else if (str[i] == 41)
{
if (!st.empty() && st.top() == 40)
{
st.pop();
}
else
{
ck = 1;
}
}
else if (str[i] == 93)
{
if (!st.empty() && st.top() == 91)
{
st.pop();
}
else
{
ck = 1;
}
}
}
if (st.empty() && ck == 0)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
cin 으로 입력을 받았을때 자동으로 yes 가 나와버려서 난감했다. cin 이후에 버퍼를 비워주는 함수 cin.ignore()를 사용함으로서 해결했다.
cin은 입력값의 기준을 띄어쓰기 , 엔터, 탭등으로 나누는데 반해 getline 은 엔터를 잡는다.
getline과 cin을 같이 사용할경우에는 cin 이 버퍼에 남긴 엔터를 getline 이 읽었기 때문에 문제였다.