백준/9012/자료구조(stack)/괄호

유기태·2024년 1월 27일

백준/9012/자료구조(stack)/괄호

문제 해석

완전한 괄호를 이루는 괄호인지를 판별하는 문제입니다.

문제 풀이

괄호는 결국 여는 괄호를 닫는 괄호가 알맞게 나오면 되는 문제입니다.
이를 위해 다음과 같이 판별합니다.

  1. 괄호를 닫을 때 여는 괄호가 있었는지를 확인
  2. 모든 괄호는 열었을 대 알맞은 갯수의 닫는 갯수가 나와야 하는지 확인

다음과 같은 순서를 지켜야 완전한 괄호를 판별할 수 있다. 2번만을 확인하면 닫는 괄호가 먼저 나오고 여는 괄호가 같은 갯수로 나온다면 이 또한 완전한 괄호로 판별 하기 때문이다.

1. 괄호를 닫을 때 여는 괄호가 있었는지를 확인

for (int j = 0;j < bracket.size();j++)
{
	if (bracket[j] == ')')
	{
		if (s.size() == 0)
		{
			result = 0;
		}
		else
		{
			s.pop();
		}
	}
	else
	{
		s.push('C');
	}
}

2. 모든 괄호는 열었을 대 알맞은 갯수의 닫는 갯수가 나와야 하는지 확인

if (s.size() != 0)
{
	result = 0;
}

풀이

첫번째 풀이

#include<iostream>
#include<stack>
using namespace std;

stack<char>s;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int T = 0;

	cin >> T;

	int result = 0;
	for (int i = 0;i < T;i++)
	{
		string bracket = "";
		cin >> bracket;

		result = 1;
		for (int j = 0;j < bracket.size();j++)
		{
			if (bracket[j] == ')')
			{
				if (s.size() == 0)
				{
					result = 0;
				}
				else
				{
					s.pop();
				}
			}
			else
			{
				s.push('C');
			}
		}

		if (s.size() != 0)
		{
			result = 0;
		}

		if (result == 0)
		{
			cout << "NO\n";
		}
		else
		{
			cout << "YES\n";
		}
		
		while (!s.empty())
		{
			s.pop();
		}
	}

	return 0;
}
profile
게임프로그래머 지망!

0개의 댓글