白駿1316組合せ単語checker


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


トラブルシューティング


ポイントは、文字が連続しているかどうかを確認することです.
生成check()メソッド
  • 組の単語
  • であるかどうかをチェックする.
  • 文字に基づいてcheck配列を宣言し、変数を宣言して前の文字と現在の文字を比較します.
  • の前の文字が現在の文字と異なる場合、
  • 文字が初めて現れるとcheck配列の値trueに変換され、そうでない場合false
  • に戻る
    前の文字が現在の文字と同じである場合、continue
  • check()メソッドを呼び出し、trueの場合にのみcountを追加して結果値
  • を出力する.

    ソースコード

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class b1316 {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
        public static void main(String[] args) throws IOException {
    
            int count = 0; // 그룹 단어 개수 출력 변수
            int n = Integer.parseInt(br.readLine());
            for (int i = 0; i < n; i++) { // 그룹 단어 체커 함수 n번 실행
                if (check() == true) { // 그룹 단어일 경우 카운트 변수 증가
                    count++;
                }
            }
            System.out.println(count);
        }
    
        // 그룹 단어 체크할 함수
        // 그룹 단어인지 아닌지 파악 -> return boolean
        public static boolean check() throws IOException {
            boolean[] check = new boolean[26]; // 알파벳 개수만큼 배열 생성, 그룹 단어 체크 배열
            int prev = 0; // 이전 문자와 연속 여부 파악 변수
            String s = br.readLine();
            for (int i = 0; i < s.length(); i++) {
                int now = s.charAt(i); // 현재 문자
    
                // 이전 문자와 i번째 문자가 같지 않다면?
                if (prev != now) {
                    // 해당 문자가 처음 나오는 경우
                    if (check[now - 'a'] == false) {
                        check[now - 'a'] = true; // true로 변경
                        prev = now; // 현재 문자는 이전 문자로 변경, 다음 들어올 문자가 현재 문자로 변경
                    }
                    // 해당 문자가 이미 나온 적 있는 경우 (그룹 단어가 아님)
                    else {
                        return false;
                    }
                } else { // 앞선 문자와 i번째 문자가 같다면? (연속된 문자)
                    continue;
                }
            }
            return true;
        }
    }