#include <iostream>
using namespace std;
int N;
string str;
int alphabet[26] = {0};
int cnt = 0, idx = 99999;
int main(int argc, char **argv){
scanf("%d", &N);
for(int i = 0; i < N; i++){
cin >> str;
char c;
for(int i = 0; i < str.size(); i++){
c = str[i];
if(idx != c - 97 && alphabet[c - 97] != 0){ // 이전 인덱스
break;
}
idx = c - 97; // 현재 인덱스
alphabet[idx]++;
if(i == (str.size() - 1)){
cnt++;
}
}
for(int i = 0; i < 26; i++){
alphabet[i] = 0; // 초기화
}
}
printf("%d\n", cnt);
return 0;
}
코드를 너무 어렵게 짠 것 같다. 내가 짠 경우에는 해당 문자가 불려온 적이 있는지를 체크하고, 만약 이전의 인덱스와 지금의 인덱스를 비교하고 만약 서로 이어지지 않고(인덱스가 다름) 이미 불려진 적이 있다면(알파벳 배열 수 0 아님) 그룹단어가 아니라고 보았다.
근데 이것은 매우 비효율적이다. 다른 분들의 코드를 보면 바로 앞의 문자와 다르고 이전과 같은 문자가 나온적이 있으면(배열 이용) 그룹단어가 아니라고 보았다.