Coding Test/백준

[백준 자바 JAVA] 1316번 그룹 단어 체커

똧이 2022. 3. 17. 21:55
반응형

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    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++){
            Boolean[] check = new Boolean[26]; // 알파벳의 등장여부
            Boolean isGroupWord = true; // 해당 단어가 그룹 단어인지 아닌지 판별
            String str = br.readLine();
            for(int j = 0; j < str.length(); j++){ // 해당 단어의 길이만큼 반복
                int ch = (int)str.charAt(j) - 97; 
                /* 
                    아스키 코드 이용, a = 97 ~ z = 122
                    알파벳 순서대로 check 배열에 값을 넣어주기 위해서 -97을 해줬다.
                    ex. a의 아스키 코드는 97, a는 배열의 [0]번째에 들어가야 하므로 97 - 97 = 0
                        b의 아스키 코드는 98, b는 배열의 [1]번째에 들어가야 하므로 98 - 97 = 1
                */
                
                if(check[ch] == null){ // 해당 문자가 아직 한 번도 등장하지 않은 경우
                    check[ch] = true; // 해당 배열값을 true로 변환
                } else if (check[ch] == true){ // 해당 문자가 이전에 등장한 경우
                    if (str.charAt(j) != str.charAt(j-1)){ // 만약 j번째 문자가 j-1번째 문자와 같지 않다면 == 그룹 단어가 아니라면
                        isGroupWord = false; // 해당 단어는 그룹 단어가 아니므로 false값을 넣어주고
                        break; // 해당 for문을 중지시킨다.(이미 그룹단어가 아님을 판별 했으므로 더 이상 반복할 이유가 없음)
                    }
                }
            }
            if(isGroupWord != false) count++; // 해당 단어가 그룹단어라면 count++
        }

        System.out.println(count);
    }
}
728x90