[Java] 백준 BOJ / 1316번: 그룹 단어 체커

개미개미개·2024년 6월 20일

Algorithm

목록 보기
1/63
post-thumbnail

그룹단어체커

이 문제에서 그룹 단어 여부를 판명짓는 요소는 단어의 연속성의 유일성이다.
단어가 연속적으로 나오고 그 연속적인 단어의 묶음은 단 한 번만 존재해야 하는 것이다.


예제 입력 1을 보자

1) h a pp y

happy 라는 단어에서는 알파벳의 종류가 h,a,p,y 로 총 4개가 나왔고 변한 횟수는 3 번이다.

2) n e w

new 라는 단어에서는 알파벳의 종류가 n,e,w 로 총 3개가 나왔고 변한 횟수는 2 번이다.

3)y e a r

year 라는 단어에서는 알파벳의 종류가 y,e,a,r로 총 4개가 나왔고 변한 횟수는 3 번이다.

모두가 그룹 단어이기 때문에 3을 출력한다.


예제 입력 2를 보자

1) a b a

aba 라는 단어에서는 알파벳의 종류가 a,b 로 총 2개가 나왔고 변한 횟수는 2 번이다.

2) a b a b

abab 라는 단어에서는 알파벳의 종류가 a,b 로 총 2개가 나왔고 변한 횟수는 3 번이다.

3) a b c a b c

abcabc 라는 단어에서는 알파벳의 종류가 a,b,c 로 총 3개가 나왔고 변한 횟수는 5 번이다.

4) a

a 라는 단어에서는 알파벳의 종류가 a 로 총 1개가 나왔고 변한 횟수는 0 번이다.

그룹 단어는 4번째 입력 값인 a 하나 이므로 1 을 출력한다.


위 두 예제에서 우리는 알파벳의 종류 = 변한 횟수 + 1 이라는 것을 알 수 있다.

그렇다면 우리는 알파벳의 개수인 26의 크기를 가진 Int 배열을 선언하고 위에서 우리가 알아낸 조건과 맞는 것들만 카운트 해주면 되겠다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int n = keyboard.nextInt();
        keyboard.nextLine();
        int[] alphabet = new int[26];
        int count = 0, change, pos, alphabet_count;
        String str;
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < 26; i++)
                alphabet[i] = 0;
            change = 0;
            alphabet_count = 0;
            str = keyboard.nextLine();
            char[] ch = str.toCharArray();
            for (int i = 0; i < ch.length; i++) {
                pos = ch[i] - 97;
                alphabet[pos]++;
                if (i > 0 && pos != ch[i - 1] - 97)
                    change++;
            }
            for (int i = 0; i < 26; i++) {
                if (alphabet[i] != 0)
                    alphabet_count++;
            }
            if (alphabet_count - change == 1)
                count++;
        }
        System.out.println(count);
    }
}
profile
개미는 오늘도 일을 합니다.

0개의 댓글