그룹 단어 체커

FinalForever·2025년 12월 29일
post-thumbnail

1316번

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

이 문제가 난제에 빠지기 쉬운 이유는

해설의 핵심은 딱 이 한 줄입니다.

그룹 단어란: 어떤 문자가 한 번 끊기면 다시 나오면 안 된다

정리하자면 : 같은 문자가 연속해서 나오는 것 → ⭕ 허용
다른 문자가 중간에 끼었는데, 이전 문자가 다시 등장 → ❌ 그룹 단어 아님

예제 2

4
aba
abab
abcabc
a

a -> b 하고 끊겼다가 a 다시 나오니 단어가 아님 ❌
a b a b : a-> b가 끊겼다가 다시 나와서 단어가 아님 ❌
abcabc a b c 후에 a -> b -> c가 다시 나와서 단어가 아님 ❌
a는 그룹 단어임 ⭕

예제 3

5
ab
aa
aca
ba
bb

a b 는 그룹 단어 ⭕
a a 는 그룹 단어 ⭕
a c -> a가 다시 나와서 그룹 단어 아님 ❌
b a 는 그룹 단어 ⭕
b b 는 그룹 단어 ⭕

예제 6

9
aaa
aaazbz
babb
aazz
azbz
aabbaa
abacc
aba
zzaz

a a a 는 그룹 단어
a a a z b z 는 그룹 단어 아님 z가 다시 나옴 ❌
b a b b 는 그룹 단어 아님 b a -> b 다시 나옴 ❌
a a z z 그룹 단어
a z b z 는 그룹 단어 아님 a z b -> z가 다시 나옴 ❌
a a b b a a 는 그룹 단어 아님 a a b b -> a가 다시 나옴 ❌
a b a c c 는 그룹 단어 아님 a b a c -> c가 다시 나옴 ❌
a b a 그룹 단어 당연히 아님
z z a z 그룹 단어 아님 !!!

코드

import java.util.*;

public class GroupChecker {
	public static void main(String[] args) { 
    
    Scanner sc = new Scanner(System.in);
    
    // 단어 개수
    int N = sc.nextInt();
    int count = 0;	// 그룹 단어 개수 
    
    for(int i=0; i<N; i++) {
    	// 단어 입력 
    	String s = sc.next();
        
        // 알파벳 사용 여부 체크 (a ~ z)
        int[] arr = new int[26];
        boolean isGroup = true;
        
        for(int j=0; j<s.length(); j++) {
        	char check = s.charAt(j);
            int idx = check - 'a';
            
            // 처음 나온 문자라면 체크
            if(arr[idx]==0) {
            	arr[idx]++;
           // 이미 나온 문자이고, 바로 앞 문자랑 다르면 그룹 단어 아님       
            else if (check != s.charAt(j - 1)) {
                    isGroup = false;
                    break;
                }
            }
            
            if (isGroup) {
                count++;
            }
        }
        
        System.out.println(count);
        sc.close();
    }
}

ps. 점점 저한테 너무 어려워요, ㅜㅜ 풀수 있는게 없어요 ㅜㅜ

profile
No More Struggle & Machine Mind

0개의 댓글