#include <stdio.h>
#include <stack>
using namespace std;
int main()
{
stack<char> s;
char a[30];
scanf("%s", &a);
for(int i = 0; a[i] != '\0'; i++)
{
if(a[i] == '(')
s.push(a[i]);
else if(a[i] == ')')
{
if(s.empty())
{
printf("NO");
return 0;
}
else
s.pop();
}
}
if(s.empty())
printf("YES");
else
printf("NO");
return 0;
}
1. string 입력을 저장할 char 배열 a, stack s 를 선언한다.
2. char a 의 원소를 확인하면서 '(' 라면 push, ')' 라면 pop을 한다.
3. 만약 pop을 하려는데 stack이 비어있다면, 올바르지 않은 괄호이므로 "NO"를 출력하고 return 0;
-> ()()()) 을 예로 들 수 있다.
4. for 문이 끝나고나서 stack 이 비어있다면 "YES"를, 그렇지 않다면 "NO"를 출력한다.
-> ()()() 는 push와 pop의 횟수가 같으므로 stack이 비게 된다.
-> ()()( 는 '('이 stack에 남게 된다.