본문 바로가기
알고리즘/백준

백준 1316번 그룹 단어 체커 자바 java

by 클로드 2021. 4. 6.
반응형

문제

 

풀이

연속해서 나타나는 단어를 체크하는 부분에서 어떻게 구현을 하지? 하는 생각에 시간이 걸렸다

먼저 소문자 알파벳 배열 groupWords를 만들고 (a ~ z까지 총 26개)

그룹 단어가 아닌것을 구분하기 위해서 groupWordsCheck 변수를 만들었다

2중 for문을 이용해서 연속해서 단어를 체크를 하고 groupWords에 값을 입력

for (int k = j + 1; k < words[i].length(); k++) {
    //그다음 단어가 같지 않다면 종료
    if (words[i].charAt(j) != words[i].charAt(k)) {
        groupWords[(int)words[i].charAt(j) - 97] = count;
        break;
    }

    j++;
    count++;
}

 

떨어진 단어가 나오면 groupWordsCheck false로 값을 입력

if (groupWords[(int)words[i].charAt(j) - 97] > 0) {
    groupWordsCheck = false;
    break;
}

 

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] words = new String[n];
        int groupWordsCount = 0;

        for (int i = 0; i < n; i++) {
            words[i] = sc.next();
        }

        for (int i = 0; i < n; i++) {
            int[] groupWords = new int[26];
            boolean groupWordsCheck = true;

            for (int j = 0; j < words[i].length(); j++) {
                //이전에 단어가 있다면 그룹단어가 아님
                if (groupWords[(int)words[i].charAt(j) - 97] > 0) {
                    groupWordsCheck = false;
                    break;
                }

                //연속된 문자 검색
                int count = 1;

                for (int k = j + 1; k < words[i].length(); k++) {
                    //그다음 단어가 같지 않다면 종료
                    if (words[i].charAt(j) != words[i].charAt(k)) {
                        groupWords[(int)words[i].charAt(j) - 97] = count;
                        break;
                    }

                    j++;
                    count++;
                }
            }

            if (groupWordsCheck) {
                groupWordsCount++;
            }
        }

        System.out.println(groupWordsCount);
    }
}

 

출처

www.acmicpc.net/problem/1316

반응형

댓글