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

JavaScript로 구현하는 킷캣(Kit-Kat) 배열 알고리즘

문제 소개

이번 글에서는 JavaScript로 킷캣(Kit-Kat) 배열 문제를 해결하는 방법을 알아보겠습니다. 이 문제는 유명한 FizzBuzz 문제와 매우 유사한 형태의 알고리즘 연습 문제로, 코딩 테스트 준비에도 도움이 됩니다.

요구 사항은 다음과 같습니다. 첫 번째 인자로 자연수 num, 두 번째와 세 번째 인자로 각각 자연수 mn을 받는 JavaScript 함수를 작성합니다. 함수는 1부터 num까지(num 포함)의 모든 자연수를 오름차순으로 담은 배열을 반환해야 합니다.

단, 아래 조건에 해당하는 숫자는 문자열로 대체해야 합니다:

  • 숫자가 m의 배수이면 'kit' 문자열로 대체합니다.

  • 숫자가 n의 배수이면 'kat' 문자열로 대체합니다.

  • 숫자가 mn 모두의 배수이면 'kitkat' 문자열로 대체합니다.

구현 코드

위 조건을 만족하는 코드는 다음과 같습니다:

const num = 50;
const m = 5, n = 6;

const kitKat = (num = 1, m = 1, n = 1) => {
    const res = [];
    for(let i = 1; i <= num; i++){
        if(i % m === 0 && i % n === 0){
            res.push('kitkat');
        }else if(i % m === 0){
            res.push('kit');
        }else if(i % n === 0){
            res.push('kat');
        }else{
            res.push(i);
        }
    }
    return res;
};

console.log(kitKat(num, m, n));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다:

[
    1, 2, 3, 4, 'kit',
    'kat', 7, 8, 9, 'kit',
    11, 'kat', 13, 14, 'kit',
    16, 17, 'kat', 19, 'kit',
    21, 22, 23, 'kat', 'kit',
    26, 27, 28, 29, 'kitkat',
    31, 32, 33, 34, 'kit',
    'kat', 37, 38, 39, 'kit',
    41, 'kat', 43, 44, 'kit',
    46, 47, 'kat', 49, 'kit'
]

코드 동작 원리

이 함수의 핵심 로직은 다음과 같습니다:

  1. 조건 검사 순서가 중요합니다: 가장 먼저 i % m === 0 && i % n === 0 조건으로 두 수의 공배수인지 확인합니다. 이 조건을 마지막에 검사하면 공배수가 'kit' 또는 'kat'으로 잘못 분류되어 버립니다.

  2. 나머지 연산자(%) 활용: 어떤 수가 다른 수의 배수인지 판별할 때 나머지 연산자를 사용합니다. 나눈 나머지가 0이면 해당 수의 배수임을 의미합니다.

  3. 기본 매개변수: 화살표 함수의 매개변수에 기본값(= 1)을 설정하여, 인자가 전달되지 않더라도 함수가 안전하게 동작하도록 처리했습니다.

예를 들어 m = 5, n = 6인 경우를 살펴보면, 5의 배수(5, 10, 15...)는 'kit'으로, 6의 배수(6, 12, 18...)는 'kat'으로 대체되며, 30처럼 두 수의 공배수에 해당하는 숫자만 'kitkat'으로 대체됩니다.