본문 바로가기
코딩공부/백준 (java)

[백준 1316] 그룹 단어 체커 (java)

by CodingKwon 2021. 7. 18.

문제 링크

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

나의 코드 (java)

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

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());
        // 그룹 단어를 카운팅 할 변수
        int cnt = 0;

        for (int i=0; i<n; i++){
            // 입력 받을 문자열
            String s = br.readLine();
            // 알파벳을 담을 배열
            int arr[] = new int[26];
            // 그룹 단어면 0, 그룹 단어가 아니면 1
            int flag = 0;

            for (int j=0; j<s.length(); j++){
                if (arr[s.charAt(j) - 'a'] == 0){
                    if (j < s.length() - 1) {
                        if (s.charAt(j) != s.charAt(j+1)){
                            // 문자열의 마지막 단어가 아니면서 단어가 연속된 단어가 아님을 확인하면 1로 체크
                            arr[s.charAt(j) - 'a'] = 1;
                        }
                    } else {
                        // 문자열의 마지막 단어라면 그 값은 1로 체크
                        arr[s.charAt(j) - 'a'] = 1;
                    }
                } else {
                    // 검증한 값이 1이면 즉, 이미 체크했던 단어라면 flag를 바꿈
                    flag = 1;
                }
            }
            
            // flag가 0이 그룹 단어로 판단하고 카운팅
            if (flag == 0) {
                cnt++;
            }
        }

        // 결과 출력
        System.out.println(cnt);
    }
}

 

저는 이 문제를 접근할 때 flag를 두어서 반복문이 한번 돌아갈 때 그 flag가 0(그룹 단어)이면 카운팅하고 1(그룹 단어가 아님)이면 카운팅 하지 않도록 하였습니다.

 

또한 알파벳을 담을 26 크기의 배열을 두어서 이미 사용된 알파벳을 체크하도록 했습니다. 그 과정에서 검증할 단어가 연속적으로 나온다면 마지막에 알파벳 배열에 체크하도록 로직을 구성했습니다.

 

문자열의 마지막 단어가 체크되지 않은 알파벳이면 알파벳 배열에 체크합니다.

 

검증한 값이 이미 1로 체크되어 있다면 flag를 1로 바꿔서 카운팅 하지 않습니다.

'코딩공부 > 백준 (java)' 카테고리의 다른 글

[백준 2292] 벌집 (java)  (0) 2021.07.25
[백준 1712] 손익분기점 (java)  (0) 2021.07.25
[백준 2941] 크로아티아 알파벳 (java)  (0) 2021.07.17
[백준 5622] 다이얼 (java)  (0) 2021.07.16
[백준 2908] 상수 (java)  (0) 2021.07.15

댓글