백준 1316번 그룹 단어 체커

안녕하세요. 개발자 움탱입니다.
이 기사는 알고리즘을 공부하면서 공부를 추적하기 위한 것입니다.
그래서 설명마다 일기장으로 편하게 쓰려고 하고 짧은 언어 형식으로 쓰려고 합니다.
그리고 더 좋은 시각이 있으시거나 잘 모르시는 부분이 있으시면 알려주시면 정말 감사하겠습니다.
좋은 하루 보내세요 🙂

문제

그룹 단어는 단어에 존재하는 모든 문자 중 각 문자가 순차적으로 나타나는 경우만을 말합니다. 예를 들어 ccazzzzbb는 c, a, z, b가 모두 순차적으로 나타나므로 그룹어이고 kin은 k, i, n이 차례로 나타나므로 그룹어이지만 aabbbccb는 b가 단독으로 나타나므로 그룹어가 아닙니다.

N 단어를 입력받아 그룹의 단어 수를 출력하는 프로그램을 작성하세요.

기입

단어 수 N이 첫 번째 줄에 입력됩니다. N은 100보다 작거나 같은 자연수이다. 단어는 두 번째 줄부터 N줄로 입력된다. 단어는 알파벳 소문자만 포함하고 겹치지 않으며 최대 100자까지 가능합니다.

누르다

첫 번째 줄에 그룹 단어의 수를 인쇄하십시오.


알고리즘 분류

  • 화신

문제 설명

문제는 단순히 말로 문자가 없는 단어 세기(+) 하기 나름이다

별도의 알파벳이 있는 단어

  • 아바, 아바, 바브…

별도의 문자가 없는 단어

  • ab, abbbb, ba, cccc, abcdef…

설명

즉, 별도의 알파벳이 없는 단어를 세십시오.

전체 단어에서 분리된 문자가 있는 단어를 뺍니다.

단어에 분할알파벳이 있는지 알기 위해서는 다음과 같은 준비가 필요합니다.

  • 현재 색인 바로 앞의 알파벳
  • 현재 알파벳이 순회되었는지 여부를 기록하는 부울 배열입니다.

이후 이전알파벳과 현재알파벳이 다르면 이전알파벳이 통과되었는지 확인하고 맞으면 합계에서 빼줍니다.

암호

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

public class Main {
    public static void main(String() args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine()); //단어의 개수

        int count = N;

        for (int k = 0; k < N; k++) {
            String s = br.readLine();

            boolean() ckAlpha = new boolean('z' - 'a' + 1);
            char prev = s.charAt(0);
            ckAlpha(prev - 'a') = true;

            for (int i = 1; i < s.length(); i++) {
                char cur = s.charAt(i);

                if (prev != cur && ckAlpha(cur - 'a')) {
                    count--;
                    break;
                    
                } else if (prev != cur && !ckAlpha(cur - 'a')) {
                    ckAlpha(cur - 'a') = true;
                    prev = cur;
                }
            }
        }

        System.out.println(count);
        br.close();
    }
}