개발지식 먹는 하마 님의 블로그

1316번 - 그룹 단어 체커 본문

coding

1316번 - 그룹 단어 체커

devhippo 2025. 2. 28. 09:57

✏️ 문제 풀이

  • 새로운 문자일 경우 이를 저장한다.

중복을 허용하지 않는 HasgSet을 사용하였다.

HashSet<Character> seen = new HashSet<>();
  • 현재 문자가 이전 문자와 다를 경우, 이 문자가 나온 적이 있는지 확인한다.

contains는 해시 테이블 기반 검색을 하기 때문에 for문 사용해 직접 검사하는 것보다 빠르다.
나온적이 있다면 그룹 단어가 아니다. 아니라면 해당 문자를 저장한다.

for (char ch : word.toCharArray()) {
    if (ch != prev) { // 새로운 문자일 경우만 검사
        if (seen.contains(ch)) { // 이미 나온 문자라면 그룹 단어가 아님
            return false;
        }
        seen.add(ch); // 새 문자를 집합에 추가
    }
    prev = ch; // 이전 문자 갱신
}

🖥️ 코드

public static boolean isGroupWord(String word) {
    HashSet<Character> seen = new HashSet<>(); // 등장한 문자 저장
    char prev = '\0'; // 이전 문자 초기화

    for (char ch : word.toCharArray()) {
        if (ch != prev) { // 새로운 문자일 경우만 검사
            if (seen.contains(ch)) { // 이미 나온 문자라면 그룹 단어가 아님
                return false;
            }
            seen.add(ch); // 새 문자를 집합에 추가
        }
        prev = ch; // 이전 문자 갱신
    }
    seen.clear();
    return true;
}
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt(); // 단어 개수
    int count = 0; // 그룹 단어 개수
    sc.nextLine(); // 개행 문자 처리

    for (int i = 0; i < n; i++) {
        String word = sc.nextLine();
        if (isGroupWord(word)) {
            count++;
        }
    }
    System.out.println(count);
    sc.close();
}

'coding' 카테고리의 다른 글

프로그래머스 lv2 - 멀쩡한 사각형  (0) 2025.03.07
프로그래머스 lv2 - 시소 짝꿍  (0) 2025.03.05
1541번 - 잃어버린 괄호  (0) 2025.02.27
13305번 - 주유소  (0) 2025.02.26
1931번 - 회의실 배정  (0) 2025.02.25