팬그램(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 메서드의 동작 순서를 단계별로 살펴보면 다음과 같습니다.
- ToLower()로 문자열 전체를 소문자로 변환하여 'T'와 't'처럼 대소문자만 다른 경우를 하나의 문자로 통합합니다.
- Where(ch => Char.IsLetter(ch))를 통해 공백 등 알파벳이 아닌 문자를 제거합니다.
- GroupBy(ch => ch)로 같은 문자끼리 묶어 중복을 제거합니다.
- Count() == 26 조건으로 고유한 알파벳 문자가 정확히 26개라면 true(팬그램)를 반환합니다.
이 방식은 LINQ를 활용해 간결하게 작성되었으며, 별도의 반복문 없이 한 줄의 람다 표현식으로 팬그램 여부를 판별할 수 있다는 장점이 있습니다.