https://www.acmicpc.net/problem/3986
'좋은 단어'를 세는 것이 목표입니다. 여기서 말하는 좋은 단어란, 같은 글자끼리 아치형 곡선을 그었을 때 곡선이 겹치는 부분이 하나도 없는 단어를 의미합니다.
문제에서는 좋은 단어라고 표현하지만 '괄호'라고 생각하면 매우 쉬운 문제가 될 것 같습니다.
괄호를 해석하는 스택을 만들어 괄호의 짝이 모두 맞아 떨어져서 스택이 비게 된다면 좋은 단어가 되는 것입니다.
#include <iostream>
#include <algorithm>
#include <stack>
#include <string>
using namespace std;
int t, cntA = 0, cntB = 0, cnt = 0;
string word;
bool oddflag = false; // true면 A가 홀수, false면 B가 홀수
int main() {
cin >> t;
while(t--) {
stack<char> s;
cin >> word;
for(int i = 0; i < word.size(); i++) {
if(s.empty()) {
s.push(word[i]);
} else {
if(s.top() == word[i]) {
s.pop();
} else {
s.push(word[i]);
}
}
}
if(s.empty()) cnt++;
}
cout << cnt << endl;
return 0;
}