https://www.acmicpc.net/problem/1316
입력 받은 문자열 중 같은 알파벳이 연속되는 경우에만 그룹 단어라 할 수 있다. 즉 aabc는 a,b,c가 있는 그룹 단어이고, aba는 a가 연속 되지 않기 때문에 그룹 단어라고 할 수 없다.
먼저 테스트 케이스 num을 입력 받는다. 그리고 그 num만큼 반복문을 돌리고 알파벳 26개의 존재 여부를 확인 하기 위한 boolean 배열을 생성한다.
입력 받은 str의 첫번째 단어를 가져와 first에 저장하고 그 알파벳에 해당하는 index에 true값을 저장한다.
ex) first→a일 때, arr[first-97] → arr[97-97] = arr[0]
그리고 그 다음 알파벳을 가져와 next에 저장한다.
이 때, arr의 값이 false이고, first값과 next값이 같지 않으면 처음 나오는 알파벳이므로 arr[next-97]에 true 값을 저장하고, first를 현재 알파벳, 즉 next로 바꿔서 저장해준다.
만약에 arr 값이 존재하고 first값과 next 값이 같지 않다면 연속된 알파벳이 아니라는 의미이므로 그룹 단어가 아니다.
최종적으로 group이 true일 경우에 count++을 해주어서 갯수를 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Q_1316 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
int count = 0;
for (int i = 0; i < num; i++) {
boolean[] arr = new boolean[26];
String str = br.readLine();
boolean group = true;
char first = str.charAt(0);
arr[first - 97] = true;
for (int j = 1; j < str.length(); j++) {
char next = str.charAt(j);
if (!arr[next - 97] && first != next) {
arr[next - 97] = true;
first = str.charAt(j);
} else if (arr[next - 97] && first != next) {
group = false;
break;
}
}
if (group) count++;
}
System.out.println(count);
}
}