백준

[백준 1316 with JAVA] 그룹 단어 체커

종식당 2025. 1. 30. 16:15
728x90
반응형

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

📝 문제 설명

문자열이 주어졌을 때 해당 문자열 내에서 같은 문자는 무조건 연속적으로 나와야 한다. 예를 들어 aaabbkkk 이는 그룹단어이다.
반대로 aakkaa이는 그룹단어가 아니다. 그룹단어가 몇 개인지 출력하면 된다.

✨ 제출 코드

import java.io.*;
import java.util.*;

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());
        String [] lst = new String[N];

        for(int i = 0; i < N; i++){
            lst[i] = br.readLine();
        }

        int result = N;

        for(int i = 0; i < N; i++){

            boolean [] check = new boolean[26];

            for (int j = 0; j < lst[i].length(); j++){
                char ch = lst[i].charAt(j);
                if(check[ch - 'a'] == false){
                    check[ch - 'a'] = true;
                } else if(j > 0 && ch!= lst[i].charAt(j-1)){
                    result -= 1;
                    break;
                }
            }
        }
        System.out.println(result);
    }
}

✌️ 코드 설명

문자열 하나 내에서 같은 문자가 연속적으로 나오는 지 체크하기 위해서 boolean배열을 알파벳 개수만큼 선언해 주었다.
그리고 for문을 통해 문자열 하나하나 돌고 다시 for문을 통해 문자열 내의 문자 하나하나를 돌았다. 이때 charAt를 통해서 문자 하나하나에 접근했다. 
이 문자 하나들은 모두 소문자로 이루어져 있어 a b c d 이렇게 구성되어 있을 것이다. 이 문자 하나에서 a를 빼면 0 1 2 3 이렇게 구성이 될 테니 이 값들을 통해 알파벳 순서대로 boolean배열에 값을 저장할 수 있다. 
처음 배열을 선언했을 때 모두 false로 되어 있을 테니 for문을 통해 문자 하나에 접근할 때 false면 true로 바꿔준다.
그리고 만약에 해당 값이 true인데 이전의 값과 다음 값이 다르다면 result -1을 해준다. 이때 result는 전체 문자열의 개수이다. 
그룹단어가 아닌 것들을 골라내어 그룹단어의 개수를 출력해 주었다.

😎 마무리

알파벳의 등장 여부 및 상태를 저장하기 위해서는 알파벳 크기만큼의 배열을 만들어서 푸는 것이 가장 좋은 방법인 것 같다.

 

728x90
반응형