[C++] 백준 9012번 - 괄호
2020. 7. 10. 16:48ㆍAlgorithm/백준
문제를 읽고 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 |