Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 문자열이 팬그램(Pangram)인지 확인하는 방법

팬그램(Pangram)은 알파벳의 모든 26개 글자를 빠짐없이 포함하고 있는 문장을 의미합니다. 가장 유명한 팬그램 예시로는 "The quick brown fox jumps over the lazy dog"가 있으며, 이 문장은 알파벳 전체를 담고 있으면서도 비교적 짧아 타자 연습이나 폰트 표본 등에 널리 사용됩니다.

팬그램 판별 원리

C#에서 문자열이 팬그램인지 확인하려면 다음 세 가지 메서드를 활용할 수 있습니다.

  • ToLower(): 대소문자 구분 없이 비교하기 위해 문자열을 모두 소문자로 변환합니다.
  • Char.IsLetter(): 공백이나 특수문자를 제외하고 실제 알파벳 문자만 필터링합니다.
  • GroupBy()와 Count(): 중복된 문자를 그룹화한 뒤 고유한 문자의 개수를 세어 26개인지 검사합니다.

예를 들어, 아래와 같은 문자열이 주어졌을 때 이것이 팬그램인지 확인해 보겠습니다.

string str = "The quick brown fox jumps over the lazy dog";

전체 예제 코드

다음 코드를 실행하여 문자열이 팬그램인지 여부를 직접 확인해 볼 수 있습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Demo {
   public class Program {
      public static void Main(string []arg) {
         string str = "The quick brown fox jumps over the lazy dog";
         Console.WriteLine("{0}: \"{1}\" is pangram", checkPangram(str), str);
         Console.ReadKey();
      }

      static bool checkPangram(string str) {
         return str.ToLower().Where(ch => Char.IsLetter(ch)).GroupBy(ch => ch).Count() == 26;
    }
}

실행 결과

True: "The quick brown fox jumps over the lazy dog" is pangram

코드 동작 과정 상세 설명

checkPangram 메서드의 동작 순서를 단계별로 살펴보면 다음과 같습니다.

  1. ToLower()로 문자열 전체를 소문자로 변환하여 'T'와 't'처럼 대소문자만 다른 경우를 하나의 문자로 통합합니다.
  2. Where(ch => Char.IsLetter(ch))를 통해 공백 등 알파벳이 아닌 문자를 제거합니다.
  3. GroupBy(ch => ch)로 같은 문자끼리 묶어 중복을 제거합니다.
  4. Count() == 26 조건으로 고유한 알파벳 문자가 정확히 26개라면 true(팬그램)를 반환합니다.

이 방식은 LINQ를 활용해 간결하게 작성되었으며, 별도의 반복문 없이 한 줄의 람다 표현식으로 팬그램 여부를 판별할 수 있다는 장점이 있습니다.