Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 팬그램(Pangram) 문자열 판별하기


팬그램(Pangram) 문자열이란?

팬그램(Pangram)은 영어 알파벳 26개 글자 a부터 z까지 모든 문자를 최소 한 번 이상 포함하는 문자열을 의미합니다. 대표적인 예로 "The quick brown fox jumps over the lazy dog"이라는 문장이 있으며, 이 문장은 알파벳 전체를 담고 있어 가장 유명한 팬그램으로 꼽힙니다.

이번 문제에서는 문자열을 첫 번째이자 유일한 인자로 받아, 해당 문자열이 팬그램인지 아닌지를 판별하는 JavaScript 함수를 작성해야 합니다. 여기서는 편의상 소문자 알파벳만 고려하도록 하겠습니다.

접근 방법

가장 직관적인 방법은 다음과 같습니다.

  1. 입력 문자열을 소문자로 변환합니다.
  2. 알파벳 전체(a~z)를 배열로 준비합니다.
  3. 문자열을 순회하면서 각 문자가 알파벳 배열에 존재하면 해당 문자를 배열에서 제거합니다.
  4. 순회가 끝난 후 배열이 비어 있다면 모든 알파벳이 등장했다는 뜻이므로 팬그램입니다.

예시 코드

위 로직을 구현한 코드는 다음과 같습니다.

const str = 'We promptly judged antique ivory buckles for the next prize';

const isPangram = (str = '') => {
    str = str.toLowerCase();
    const { length } = str;
    const alphabets = 'abcdefghijklmnopqrstuvwxyz';
    const alphaArr = alphabets.split('');

    for (let i = 0; i < length; i++) {
        const el = str[i];
        const index = alphaArr.indexOf(el);
        if (index !== -1) {
            alphaArr.splice(index, 1);
        }
    }

    return !alphaArr.length;
};

console.log(isPangram(str));

출력 결과

코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

true

예제 문자열 "We promptly judged antique ivory buckles for the next prize"에는 알파벳 26개 글자가 모두 포함되어 있으므로, 함수는 true를 반환합니다.

참고: 더 효율적인 방법

위 코드는 정상적으로 동작하지만, indexOfsplice를 반복 사용하기 때문에 성능 면에서 비효율적일 수 있습니다. 실무에서는 Set 객체를 활용하는 방법이 더 간결하고 빠릅니다.

const isPangram = (str = '') => {
    return new Set(str.toLowerCase().replace(/[^a-z]/g, '')).size === 26;
};

이 코드는 알파벳이 아닌 문자를 제거한 뒤 Set으로 중복을 제거하고, 그 크기가 26이면 팬그램으로 판단합니다.