그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.
예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹
단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
이러한 문제 였다. 나의 풀이방법은 이러하다.
package algorithmus.quiz.one;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Baekjoon1316 {
public static void main(String[] args) {
// 백준문제 1316번
Scanner sc = new Scanner(System.in);
System.out.println("숫자 입력");
// 숫자 입력받기
int a = sc.nextInt();
// a개수 만큼의 배열 생성
String str[] = new String[a];
// 그룹단어를 세는 개수 count 선언
int count = 0;
// a의 숫자만큼 반복
for (int i = 0; i < a; i++) {
// 영단어 입력받기
str[i] = sc.next();
// 입력한 영단어의 알파벳 수만큼 검사반복
List<Character> list = new ArrayList<Character>();
for (int j = 0; j < str[i].length(); j++) {
// 빈 배열 생성
if (j != 0) {
if (str[i].charAt(j) != str[i].charAt(j - 1)) { // -1번째 글자와 일치하지 않을 경우
for (int k = 0; k < list.size(); k++) {
// 전의 글자와 다를 경우 --> 그 다음 검사 --> List에 추가되어있는 char들과 비교 있으면 false반환 / 없으면 List에 추가
// 배열에 들어있는 단어인지 확인
if (!list.contains(str[i].charAt(j))) { // 저장된 List 중에 일치하는 알파벳이 List에 추가
list.add(str[i].charAt(j));
}
}
} else {
list.add(str[i].charAt(j));
}
} else { // 검사하는 자리가 첫번째일 경우는 무조건 배열 첫번째에 저장
list.add(str[i].charAt(0));
}
}
System.out.println(list);
if (list.size() == str[i].length()) {
count++;
}
}
System.out.println(count);
sc.close();
}
}
🎈 풀이 방식 설명
(1) 나는 영단어를 입력하면 charAt() 이용해 첫번째글자는 List에 무조건 저장
(2) 두번째 글자부터는 첫번째글자와 비교해 같으면 미리 생성해놓은 List에 저장
(3) 다를경우 저장된 list에 같은 알파벳이 있는지 contains()을 통해 비교하였고 없을경우 list에 추가했다. (있을경우는 추가 안함)
(4) 최종적으로 list.size()와 입력한 단어의 개수가 같을 경우 count 를 증가시켰고, 증가시킨 값을 찍었다.