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

자바스크립트로 더블턴 숫자(Doubleton Number) 판별하기


더블턴 숫자(Doubleton Number)란?

서로 다른 숫자를 정확히 두 개만 포함하는 자연수를 '더블턴 숫자(doubleton number)'라고 부릅니다. 예를 들어 23, 35, 100, 12121은 각각 두 개의 서로 다른 숫자만 사용하므로 더블턴 숫자에 해당합니다. 반면 123은 세 개의 숫자(1, 2, 3)를 사용하고, 9980 역시 세 개의 숫자(9, 8, 0)를 사용하기 때문에 더블턴 숫자가 아닙니다.

문제 정의

숫자를 하나 입력받아, 해당 숫자가 더블턴 숫자이면 true를, 그렇지 않으면 false를 반환하는 자바스크립트 함수를 작성해야 합니다.

풀이 접근 방식

핵심 아이디어는 간단합니다. 숫자를 문자열로 변환한 뒤, 각 자리에 등장하는 숫자의 종류를 객체(map)에 기록하고, 최종적으로 서로 다른 숫자의 개수가 정확히 2개인지 확인하면 됩니다.

구현 단계

1. 입력받은 숫자를 String()으로 문자열 변환합니다.
2. 문자열을 한 글자씩 순회하며 객체에 아직 없는 숫자라면 키로 추가합니다.
3. 객체의 키 개수(Object.keys().length)가 2이면 true, 아니면 false를 반환합니다.

예제 코드

다음은 위 로직을 구현한 코드입니다.

const num = 121212;
const isDoubleTon = (num = 1) => {
    const str = String(num);
    const map = {};
    for(let i = 0; i < str.length; i++){
       const el = str[i];
       if(!map.hasOwnProperty(el)){
          map[el] = true;
       };
    };
    const props = Object.keys(map).length;
    return props === 2;
};
console.log(isDoubleTon(num));

실행 결과

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

true

입력값 121212는 1과 2, 두 개의 서로 다른 숫자로만 이루어져 있으므로 true가 반환됩니다. 만약 123처럼 세 종류 이상의 숫자가 포함된 값을 넣으면 false가 출력됩니다.

마무리

이 방법은 시간 복잡도 O(n)으로 숫자의 자릿수에 비례하여 동작하므로 매우 효율적입니다. 또한 Set을 활용해 new Set(String(num)).size === 2처럼 더 간결하게 구현할 수도 있으니, 상황에 맞게 선택해서 사용하시면 좋습니다.