- toc {:toc}
문제
그룹 단어를 찾는 문제이다.
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.
EX) aaabbbccc → 각 문자가 모두 연속해서 나타난다.
abc → 모두 연속해서 나타난다.
abac → b와 c는 문제가 없지만 a의 경우 연속해서 나타나는 것이 아니라 떨어져서 나타나기 때문에 그룹 단어가 아니다.
풀이
- 블록으로 묶이려면 떨어져 있는 경우가 없어야 한다.
- 이는 알파벳이 변경되는 지점 이후 부터 이전 알파벳이 뒷 자리에 존재해서는 안된다.
- EX) aaabbbccc일 경우 a → b 로 변경되는 지점부터 a가 뒷쪽 인덱스에 존재하지 않으면 된다.
#include <iostream>
#include <string>
using namespace std;
bool isGroup(string s);
int main()
{
int num, result=0;
string str;
cin >> num;
for(int i=0; i<num; i++)
{
cin >> str;
if(isGroup(str))
result++;
}
cout << result << endl;
return 0;
}
bool isGroup(string s)
{
char bAlpa;
for(int i=0; i<s.size()-1; i++)
{
if(s[i]!=s[i+1]) // 알파벳이 바뀌는 시점 aabb 이면 1-2인덱스 사이
{
bAlpa = s[i];
for(int j = i+1; j<s.size(); j++) // 뒷 알파벳 조사 후 판단
{
if(bAlpa == s[j])
return false;
}
}
}
return true;
}