#include <iostream>
#include <stack>
using namespace std;
int main() {
int i,flag=1;
stack<char> s;
char a[50];
scanf("%s",&a);
for(i = 0; a[i] != '\0'; i++){
if(a[i] == '(') s.push(a[i]);
else {
if(s.empty()) {
printf("NO");
flag = 0;
break;
}else s.pop();
}
}
if(s.empty() && flag == 1) printf("YES");
//위에서도 empty해서 NO찍고 또 YES찍을 우려가 있음.
//그래서 위 상황과 아래 상황이 다르므로 flag로 구분함
else if(!s.empty() && flag == 1) printf("NO");
return 0;
}
- ")"가 들어왔을 때 "()"가 만들어지는지를 확인해야한다.
- 따라서 ")"가 들어왔다면, "("를 가리키고 있던 stack의 top포인터를 pop시켜준다.
- 주의해야할 것은 ")"를 stack에 넣는 것이 아니다. for문을 통해 ")"가 발견됐다면 "("를 삭제시켜주는 것이다.
- 마지막으로 저장된 자료를 계속 가리키고 있어야 하는 경우에 매우 유용하다.
https://www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/dashboard