본문 바로가기
Algorithm

백준알고리즘 1316번 그룹 단어 체커

by jayden jayden-lee 2019. 7. 30.

1316번 그룹 단어 체커 문제는 문자열 처리 알고리즘 문제입니다. 여기서 말하는 그룹 단어는 동일한 문자는 연속적으로 나타나야 합니다. 예를 들어, "happy" 문자열은 p가 중복으로 나오지만 연속적으로 나오기 때문에 그룹 단어입니다. 반면에 "aba" 문자열은 맨마지막에 a 문자가 떨어져서 나타나기 때문에 그룹 단어가 아닙니다.

 

입력 값으로는 소문자 알파벳만 나오기 때문에 알파벳 숫자만큼 크기의 visited 배열을 생성합니다. 문자열에서 문자 하나씩 순회하면서 이전에 나타났는지 체크합니다.

 

처음으로 나타난 문자라면 일단 변수에 저장하고, 다음 문자와 비교해서 중복인지 체크합니다.

while (i < (arrWord.length-1)) {
    if (character != arrWord[++i]) {
        i--;
        break;
    }
}

소스 코드

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 그룹 단어 체커 문제<br>
 * 알고리즘 분류 : 문자열 처리
 *
 * @author jayden-lee
 */
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();

        List<String> words = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            words.add(scanner.next());
        }

        int count = 0;

        for (String word : words) {
            if (isGroupWord(word)) {
                count++;
            }
        }

        System.out.println(count);
    }

    private static boolean isGroupWord(String word) {
        char[] arrWord = word.toCharArray();
        boolean[] visited = new boolean[26];

        for (int i = 0; i < arrWord.length; i++) {
            if (visited[arrWord[i] - 'a']) {
                return false;
            }

            char character = arrWord[i];
            visited[arrWord[i] - 'a'] = true;

            while (i < (arrWord.length-1)) {
                if (character != arrWord[++i]) {
                    i--;
                    break;
                }
            }
        }

        return true;
    }

}

댓글0