티스토리 뷰

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

 

1316번: 그룹 단어 체커

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

www.acmicpc.net

 

이 문제는 주어진 모든 단어를 확인하면서 하나의 알파벳이 이어서 나오는 단어만을 확인하는 것입니다. 즉, 이전에 나온 알파벳이 이어나오지 않고 뒤에 다시 나타난다면 이것은 그룹 단어가 아닙니다.

 

1. 단어를 전달 받은 뒤, 각 알파벳을 비교합니다.

2. 지금 알파벳과 이전 알파벳을 비교하여 같지 않은 경우,

    2-1. 이전 알파벳을 알파벳 셋(Set)에 저장합니다.

    2-1. 지금 확인하고 있는 알파벳이 셋에 저장되어 있는지 확인하여 저장되어 있다면 바로 return false 합니다.

3. 이전 알파벳을 지금 알파벳으로 변경합니다.

4. 단어의 모든 알파벳을 확인한 경우 return true 합니다.

5. 위에서 나온 결과에 따라 true인 경우 그룹 단어 수를 증가시킵니다.

6. 테스트 케이스의 단어만큼 1 ~5 과정을 반복한 뒤, 최종적으로 그룹 단어 수를 출력합니다.

 

자바 코드는 다음과 같습니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws IOException {
        int answer = 0;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int tc = Integer.parseInt(br.readLine());
        for (int i = 0; i < tc; i++) {
            String word = br.readLine();
            if (checkGroupWord(word)) {
                answer++;
            }
        }

        System.out.println(answer);
    }

    private static boolean checkGroupWord(String word) {
        Set<Character> alphabetSet = new HashSet<>();

        char before = ' ';
        for (char w : word.toCharArray()) {
            if (before != ' ' && before != w) {
                alphabetSet.add(before);

                if (alphabetSet.contains(w)) {
                    return false;
                }
            }

            before = w;
        }

        return true;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함