문제 링크입니다: https://www.acmicpc.net/problem/3986
문제가 조금 난해하지만 결국 알파벳끼리 쌍을 이룰 때 사이에 다른 알파벳이 없을 경우가 좋은 단어입니다.
알고리즘은 아래와 같습니다.
1. 스택이 비어 있지 않은 상태에서 스택의 top과 현재 알파벳이 같을 경우 한 쌍을 이루므로 스택에서 pop합니다.
2. 1번이 아닌 경우에는 쌍을 이루지 않기 때문에 스택에 push합니다.
3. 해당 문자열을 전부 순회한 뒤 스택이 비어있다면 좋은 단어, 비어 있지 않다면 좋은 단어가 아닙니다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
int result = 0;
for (int i = 0; i < N; i++)
{
string str;
cin >> str;
stack<char> s;
for (int j = 0; j < str.length(); j++)
{
//이전 알파벳과 현재 알파벳이 같은 경우 한 쌍
if (!s.empty() && s.top() == str[j])
s.pop();
else
s.push(str[j]);
}
if (s.empty())
result++;
}
cout << result << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1918번 후위표기식 (2) | 2018.09.08 |
---|---|
백준 1725번 히스토그램 (0) | 2018.09.08 |
백준 12931번 두 배 더하기 (0) | 2018.09.08 |
백준 5397번 키로거 (2) | 2018.09.07 |
백준 9935번 문자열 폭발 (2) | 2018.09.06 |