문제 출처
1. 문제설명
- 아치형 곡선을 그어 같은 글자끼리 쌍이 지어진다면, 좋은 단어이다.
- 예를들어,
- AABB / ABBA는 글자별로 곡선을 그어 쌍을 지을 수 있지만,
- ABAB는 곡선을 그으면 각 곡선이 교차되어 쌍을 지을 수 없다.
2. 알고리즘 설계
- 스택을 활용한 문제이다.
- 스택이 비어있지 않고, 현재 글자와 stack의
top
이 같다면
- 아치형 곡선을 그을 수 있다는 뜻이므로,
pop
- 그렇지 않은 경우, stack에
push
- 모든 글자 탐색을 완료했을 때 stack이 비어있지 않다면
- 글자 수가 다르거나, 아치형 곡선으로 이어지지 못한 것
3. 전체 코드
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, ans = 0;
cin >> n;
while (n--) {
bool chk = true;
stack<char> st;
string s;
cin >> s;
for (char c : s) {
if (!st.empty() && st.top() == c) st.pop();
else st.push(c);
}
if (!st.empty()) chk = false;
if (chk) ans++;
}
cout << ans;
return 0;
}
4. 소감