문제 출처

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. 소감