입력으로 주어진 괄호 문자열이 유효한 괄호인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
자료 구조
문자열
스택
문자열의 첫 문자부터 순회하면서 '('
문자는 스택에 쌓고, ')'
을 만날때마다 빼내면 된다.
만약 순회하는 중에 스택이 비어있으면서 ')'
을 만나거나, 전부 순회했더라도 스택이 비어있지 않다면 올바른 괄호가 아니다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<char> s;
string in;
int t;
bool d = true;
cin >> t;
while (t--) {
d = true;
cin >> in;
for (int i = 0; i < in.length(); i++) {
if (in[i] == '(') s.push('(');
else if (in[i] == ')') {
if (!s.empty()) s.pop();
else {
d = false;
break;
}
}
}
if (s.empty()) {
if (d) cout << "YES\n";
else cout << "NO\n";
}
else cout << "NO\n";
while (!s.empty()) s.pop();
}
return 0;
}