C++
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
string str;
int answer = 0;
cin >> n;
for(int i=0;i<n;i++) {
cin >> str;
int alpha[27] = {0,};
int len = str.length();
bool check = true;
for(int j=0;j<len;j++) {
if(j == len-1) {
if(str[j] != str[j-1])
{
alpha[str[j]-'a']++;
}
} else {
if(str[j] != str[j+1]) {
alpha[str[j]-'a']++;
if(alpha[str[j+1]-'a'] == 1) {
check = false;
break;
}
}
}
if(alpha[str[j]-'a'] > 1) {
check = false;
break;
}
}
if(check) {
answer++;
}
}
cout << answer;
}
Python
n = int(input())
for _ in range(n):
word = input()
for i in range(len(word)-1):
if word[i] != word[i+1]:
if word[i] in word[i+1:]:
n -= 1
break
print(n)
단톡을 보다가 어떤 분이 물어서 풀어본 문제인데 빠르게 풀어보려고 c++을 사용해서 풀었다. 단어들을 비교하다가 이전에 나왔으면 break
해주는 방식으로 해결했다. aabaa
라는 반례를 못 찾아서 시간이 오래 걸렸었다. python
코드는 요새 같이 공부하는 형이 해결한 방식인데 다른 단어가 나오면 그 다음 단어부터 잘라서 거기에 존재하는지 파악하는 방식으로 해결했다. 시간이 오래 걸리지 않을까 생각했는데 처음 if문에서 최대로 걸려도 알파벳 개수 상 27번 정도여서 속도에서 크게 문제가 없을 거 같다.