IT 개발 관련/[Algorithm]

[백준] 1316번: 그룹 단어 체커 - Java

Baileyton 2024. 8. 29. 16:30
728x90

문제

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

주어진 단어가 '그룹 단어'인지 확인하는 문제로,  그룹 단어란 각 문자가 연속해서 나타나는 단어를 말합니다. 예를 들어, "happy", "new", "year"는 그룹 단어지만, "aba", "abcabc"는 그룹 단어가 아닙니다.

 

접근 방법

각 단어를 순회하면서 그룹 단어인지 확인, 그룹 단어인지 확인하기 위해서는 이전에 등장했던 문자가 다시 나오지 않는지 체크하면 된다.

 

풀이 과정

  • 각 단어를 순회하면서 문자가 연속적으로 등장하는지 확인합니다.
  • 이전 문자를 기록하고, 현재 문자가 이전 문자와 다를 때, 이전에도 등장했던 문자라면 그룹 단어가 아닙니다.
  • 문자의 등장 여부를 기록하기 위해 boolean 배열을 사용합니다. 이 배열은 각 문자의 출현 여부를 저장합니다.

 

 

코드

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 count = 0; // 그룹 단어의 개수를 셀 변수

        for (int i = 0; i < n; i++) {
            String word = br.readLine(); // 단어 입력
            if (isGroupWord(word)) {
                count++; // 그룹 단어이면 count 증가
            }
        }

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

    // 그룹 단어인지 판별하는 메소드
    public static boolean isGroupWord(String word) {
        boolean[] seen = new boolean[26]; // 각 문자의 출현 여부를 기록할 배열
        char prev = '\0'; // 이전 문자를 저장할 변수 (초기값은 null character)

        for (int i = 0; i < word.length(); i++) {
            char current = word.charAt(i); // 현재 문자

            // 이전 문자와 현재 문자가 다르고, 현재 문자가 이미 나온 적이 있다면 그룹 단어가 아님
            if (current != prev) {
                if (seen[current - 'a']) {
                    return false;
                }
                seen[current - 'a'] = true; // 현재 문자 출현 기록
                prev = current; // 이전 문자를 갱신
            }
        }
        return true; // 모든 조건을 통과하면 그룹 단어
    }
}

메모리:14140kb 시간:100ms

728x90