나는 aabbbaa라는 문자열이 있을때 a부터 차례대로 순회하면서 a~z까지 이 문자열이 이전에 체크가 되었는지 확인할 수 있는 true/false 배열을 하나 두었다. 그리고 a부터 시작하면 다른 문자가 나올때까지 무한루프를 돌게 하였다.
b가 나오면 check[0] = true로 만들고 b도 동일한 방식으로 무한루프를 돌면서 다른 문자가 나올때까지 순회한다. 다시 a가 나오면 무한루프를 돌기 전에 if문으로 true가 되어있는지 체크를 하는데 만약 true라면 그대로 빠져나와 다음 문자열을 체크한다.
더 간단하게 할 수 있는 방법이 있었다.
aabbbaa라는 문자열이 있을때
aa
aab
aabbb
aabbba
aabbbaa
이런식으로 돌면서 현재 보고 있는 문자와 바로 앞에 있는 문자가 다르고 && 현재 만약 aabbbaa에서 6번째에 있는 a를 보고 있다고 했을때 1번째부터 순회하면서 만약 같은 문자가 존재한다면 bbb를 칸막이로 하는 a 그룹이 두 개로 분리되어 있다는 뜻이 된다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int n;
vector<string> v;
string str;
cin >> n;
int count = 0;
for (int i = 0; i < n; i++)
{
cin >> str;
v.push_back(str);
}
bool flag = false;
for (int i = 0; i < n; i++)
{
bool check[26] = { false };
int len = v[i].length();
for (int j = 0; j < len;)
{
char temp = v[i][j];
flag = false;
if (check[temp - 'a'] == true)
{
flag = true;
break;
}
while (j++ < len && temp == v[i][j]);
check[temp - 'a'] = true;
}
if(!flag)
count++;
}
cout << count;
}