본문 바로가기

BOJ

[Java] 백준 1316번 : 그룹단어체크

백준 문자열 문제 중 1316번 그룹단어체크문제 해결방법이다.

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

이 문제는 그룹단어의 개수를 출력하는 문제다.

그렇기 때문에 그룹단어인지 확인하는 checker()를 따로 만들어 사용해주었다.

 

1. checker함수

입력은 소문자로만 들어오기 때문에 알파벳개수인 26개의 크기로 boolean배열을 선언해주었다.

그 후 하나하나 값을 받아오며 전의 값과 비교를 했을 때

 

1) 만약 같지 않다면

    ① 그 값을 index로 하는 위치의 배열의 값 

         - true =>그 단어는 그룹단어가 아니므로 false 리턴 후 함수 종료.

         - false => 이제 나왔으므로 false로 바꾼 후 전의 값을 현재의 값으로 바꾼 후 다음 글자 비교

 

2) 만약 같다면 => 계속 진행 (continue)

 

public static boolean checker(){
    boolean[] checker = new boolean[26];
    int prev = 0;
    String input = sc.next();

    for(int i = 0; i < input.length(); i++){
        int now = input.charAt(i);

        if(prev != now){
            if(checker[now - 'a'] == false){
                checker[now - 'a'] = true;
                prev = now;
            }
            else if(checker[now - 'a'] == true){
                return false;
            }
        }
    }
    return true;
}

 

2. main함수

만들어 놓은 checker함수를 사용해 count하고 출력

 

public static void main(String[] args){

    int N = sc.nextInt();
    int count = 0;

    for(int i = 0; i < N; i++){
        if(checker() == true){
         count++;
        }
    }

    System.out.println(count);

}

 

※ 이 때 Scanner는 main, checker에서 모두 쓰이므로 static으로 선언

 

아래는 전체코드이다.

 

import java.util.*;

public class BOJ_0201_1316 {

    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args){

        int N = sc.nextInt();
        int count = 0;

        for(int i = 0; i < N; i++){
            if(checker() == true){
             count++;
            }
        }

        System.out.println(count);

    }

    public static boolean checker(){
        boolean[] checker = new boolean[26];
        int prev = 0;
        String input = sc.next();

        for(int i = 0; i < input.length(); i++){
            int now = input.charAt(i);

            if(prev != now){
                if(checker[now - 'a'] == false){
                    checker[now - 'a'] = true;
                    prev = now;
                }
                else if(checker[now - 'a'] == true){
                    return false;
                }
            }
        }
        return true;
    }
}