[백준] 9012번 괄호 / C++

#문제

백준 9012번 괄호

#풀이

#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:

  • [백준] 10828번 스택 / C++
  • [백준] 10845번 큐 / C++
  • [백준] 18258번 큐 2 / C++
  • [백준] 10866번 덱 / C++
  • [백준] 25206번 너의 평점은 / C++