[백준] 9012번 괄호 / C++
#문제
#풀이
#include <iostream>
#include <stack>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--)
{
stack<int> st;
string ps;
cin >> ps;
bool vps = true;
for (int i = 0; i < ps.size(); ++i)
{
if (ps[i] == '(')
{
st.push(1);
}
else
{
if (st.empty())
{
vps = false;
}
else
{
st.pop();
}
}
}
if (!st.empty())
{
vps = false;
}
cout << ((vps == 1) ? "YES" : "NO") << '\n';
}
return 0;
}
#정리
입려된 모든 괄호 내 순서대로 ‘(‘와 ‘)’의 짝이 모두 맞아야 VPS가 성립된다고 한다. 보자마자 버퍼를 생각했고, “’(‘가 입력되었을 때, ‘)’가 입력되어야 하나의 짝이 이루어져 나간다”라는 조건 하에 코드를 작업. 스택이 효율적이라고 생각하였고, ‘(‘가 입력되었을 때 스택에 push, ‘)’가 입력되었을 땐 st 내 원소 존재 여부에 따라 있으면 pop, 없다면 vps = false를 진행. 마지막에 스택이 empty가 아니라면 모든 짝이 이루어지지 않은 것이기 때문에 다시 한 번 vps = false로 처리해주고, vps를 출력하여 해결.
Enjoy Reading This Article?
Here are some more articles you might like to read next: