
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우를 말한다
예를 들면 aabbbcccc는 a,b,c가 모두 연속해서 나타나기 떄문에 그룹 단어이지만,
aabba는 a가 떨어져서 나타나기 때문에 그룹 단어가 아니다
단어 N개를 입력 받아서 그룹 단어의 개수를 출력하자
첫째 줄에 단어의 개수 N, N은 100보다 작거나 같은 자연수
둘째 줄에 N개 만큼의 단어가 들어옴, 단어는 소문자로만 되어있고 중복되지 않는다, 길이는 최대 100
이 문제를 풀기 위해선 한번 나온 문자가 연속되지 않고 다른 문자가 나온 뒤에 또 나오면 그룹단어가 아니다 라는 개념이 있으면 된다
자 위에 했지만 다시 한 번 예시를 들어보자
aaabbcc -> 그룹 단어 (같은 문자끼리 뭉쳐 있다)
ccaazzddc -> 그룹 단어가 아님 (c는 맨 압에 나왔는데, 중간에 a,z,d가 나오고 다시 나왔다)
코드에 확인 해야할 것은
1. 이전 문자와 다음 문자가 다른가?
2. 만약 다르다면 다음 문자가 이전에 나온 적이 있는가?
두 조건이 참이라면 해당 단어는 그룹 단어가 아니라서 개수에서 제외
import java.io.*;
public class No_1316 { //그룹 단어 체커
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 0;
for(int i = 0; i < N; i++) {
String str = br.readLine();
boolean arr[] = new boolean[26];
boolean check = true;
arr[str.charAt(0) - 'a'] = true; //첫 글자 왔었다
for(int j = 0; j < str.length() - 1; j++) {
int pre = str.charAt(j);
int next = str.charAt(j + 1);
//전 과 후가 다를 때
if(pre != next) {
if(arr[next - 'a'] == true) { //뒷 글자가 이미 나왔었던 경우
check = false;
break;
}
arr[next - 'a'] = true; // 처음 나온 글자면 왔다고 표시
}
}
if(check == true) count++;
}
System.out.println(count);
}
}