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

JavaScript로 팬디지털(Pandigital) 숫자 확인하는 방법

팬디지털(Pandigital) 숫자란 0부터 9까지의 모든 숫자를 최소 한 번 이상 포함하고 있는 수를 말합니다. 이번 글에서는 숫자를 나타내는 문자열을 인자로 받아, 해당 숫자가 팬디지털이면 true를, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 접근 방식

가장 직관적인 방법은 0부터 9까지의 숫자 목록을 미리 만들어 두고, 입력 문자열을 한 글자씩 순회하면서 해당 숫자를 목록에서 제거하는 것입니다. 모든 자릿수를 확인한 후 목록이 비어 있다면, 0~9의 모든 숫자가 등장했다는 의미이므로 팬디지털 숫자입니다.

예제 코드

다음은 팬디지털 숫자 여부를 확인하는 코드입니다.

const numStr1 = '47458892414';
const numStr2 = '53657687691428890';

const isPandigital = numStr => {
    let legend = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    for(let i = 0; i < numStr.length; i++){
        if(!legend.includes(numStr[i])){
            continue;
        };
        legend.splice(legend.indexOf(numStr[i]), 1);
    };
    return !legend.length;
};

console.log(isPandigital(numStr1));
console.log(isPandigital(numStr2));

코드 설명

먼저 0부터 9까지의 숫자를 담은 배열 legend를 생성합니다. 이후 입력 문자열을 앞에서부터 한 글자씩 검사하면서, 아직 남아 있는 숫자라면 splice() 메서드로 배열에서 제거합니다. 이미 제거된 숫자는 continue로 건너뜁니다. 반복이 끝난 뒤 배열이 비어 있으면(!legend.length) 모든 숫자가 한 번 이상 등장한 것이므로 true를 반환합니다.

실행 결과

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

false
true

첫 번째 예시인 '47458892414'에는 0, 3, 6이 포함되어 있지 않아 false가 출력되고, 두 번째 예시인 '53657687691428890'은 0부터 9까지 모든 숫자를 포함하므로 true가 출력됩니다.

마무리

이처럼 배열을 활용하면 팬디지털 숫자 여부를 간단하게 판별할 수 있습니다. 참고로 Set을 사용해 등장한 숫자를 수집한 뒤 크기가 10인지 확인하는 방법도 있으며, 이 경우 코드가 더욱 간결해집니다.