백준 C# 1316번 - 그룹 단어 체커

김보근·2025년 5월 9일

백준

목록 보기
13/62

백준 C1316번 - 그룹 단어 체커


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

오늘은 그룹 단어 체커 문제를 풀어봤다.
처음엔 문제 자체는 어렵지 않아 보였는데, 중복 문자가 떨어져 다시 등장할 때를 어떻게 체크할지 고민을 좀 했다.

핵심 로직은 아래 두 가지 조건을 판단하는 것이다:

연속된 문자는 괜찮다. (예: aabbcc)

하지만 한 번 등장하고 떨어졌다가 다시 나오면 그룹 단어가 아니다. (예: abab)

이를 위해 prev라는 변수로 바로 이전 문자를 기억하고,
bool[] seen = new bool[26] 배열로 해당 문자가 한 번이라도 등장했는지 체크했다.

 static void Main(string[] args)
 {
     int inputLength = int.Parse(Console.ReadLine());
     int groupWordCount = 0;

     for (int i = 0; i < inputLength; i++)
     {
         string input = Console.ReadLine();
         if (IsGroupWord(input))
         {
             groupWordCount++;
         }
     }

     Console.WriteLine(groupWordCount);
 }

 static bool IsGroupWord(string word)
 {
     bool[] seen = new bool[26]; // 알파벳 사용 여부
     char prev = '\0'; // 이전 문자

     foreach (char c in word)
     {
         if (c != prev)
         {
             if (seen[c - 'a']) // 이미 나왔던 문자가 떨어져서 다시 나옴
             {
                 return false;
             }
             seen[c - 'a'] = true;
         }
         prev = c;
     }

     return true; // 그룹 단어임
 }

seen[c - 'a']처럼 문자를 인덱스로 바꾸는 게 익숙하지 않아서 처음엔 헷갈렸는데,
알고 보니 'a'의 아스키 값이 97이니까 'c' - 'a'를 하면 알파벳 순서대로 0~25로 바뀌는 것이었다.

이 문제를 통해 foreach 루프, 아스키 코드 계산, 그리고 불린 배열을 통한 방문 체크까지
실전에서 자주 쓸 수 있는 기초 로직을 다시 익힐 수 있었다.

profile
게임개발자꿈나무

0개의 댓글