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

2020. 7. 10. 16:48Algorithm/백준

  문제를 읽고 VPS는 (, ) 개수가 같고 괄호가 닫혀 있어야 된다고 생각해서 스택을 사용했다. 우선 '('이면 push, 스택이 비어있지 않고 ')'이면 pop을 했고 여기서 NO인 경우(VPS가 아닌 경우)를 두 가지 찾았다.

① ')'인데 스택이 비어있는 경우이다. 이 경우는 ')' 괄호 개수가 '('개수 보다 많은 경우 또는 ')(' 열린 괄호인 경우이다. 

② 각 문자열에 대해 연산이 끝났을 때 스택이 비어있지 않는 경우다. 이 경우는 '(' 괄호 개수가 ')'개수 보다 많은 경우이다.

※NO에 해당하는 경우를 아래 코드에서 주석으로 표시했다.

 

①, ②인 경우는 count++; 했고, count가 0이면 YES, count가 0이 아니면 NO를 출력해서 VPS를 판단했다.

#include <iostream>
#include <stack>
#include <vector>
#include <string.h>

using namespace std;

int main()
{
	int size;
	int count = 0;
	char temp[51] = {'\0',};
	stack <char> s;

	scanf_s("%d", &size);
	for (int i = 0; i < size; i++)
	{
		scanf_s("%s", &temp, 51);
		for (int j = 0; j < strlen(temp); j++)
		{
			if (temp[j] == '(')
			{
				s.push(temp[j]);
			}
			else if (!s.empty() && temp[j] == ')')
			{
				s.pop();
			}
			else //①
			{
				count++;
			}
		}
		if (!s.empty()) //②
		{
			count++;
		}
		if (count == 0)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
		temp[0] = '\0';
		count = 0;
		while (!s.empty())s.pop();
	}
}

잘못된 점이 있으면 아래 댓글로 많이 남겨주세요!

감사합니다.

'Algorithm > 백준' 카테고리의 다른 글

[C] 백준 10872번 - 팩토리얼  (0) 2020.07.16
[C] 백준 2750번 - 수 정렬하기  (0) 2020.07.13
[C] 백준 2839번 - 설탕 배달  (0) 2020.07.12
[C] 백준 1712번 - 손익분기점  (0) 2020.07.12
[C++] 백준 17298번 - 오큰수  (0) 2020.07.10