문제 소개
이번 글에서는 JavaScript로 킷캣(Kit-Kat) 배열 문제를 해결하는 방법을 알아보겠습니다. 이 문제는 유명한 FizzBuzz 문제와 매우 유사한 형태의 알고리즘 연습 문제로, 코딩 테스트 준비에도 도움이 됩니다.
요구 사항은 다음과 같습니다. 첫 번째 인자로 자연수 num, 두 번째와 세 번째 인자로 각각 자연수 m과 n을 받는 JavaScript 함수를 작성합니다. 함수는 1부터 num까지(num 포함)의 모든 자연수를 오름차순으로 담은 배열을 반환해야 합니다.
단, 아래 조건에 해당하는 숫자는 문자열로 대체해야 합니다:
숫자가
m의 배수이면'kit'문자열로 대체합니다.숫자가
n의 배수이면'kat'문자열로 대체합니다.숫자가
m과n모두의 배수이면'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'
]
코드 동작 원리
이 함수의 핵심 로직은 다음과 같습니다:
조건 검사 순서가 중요합니다: 가장 먼저
i % m === 0 && i % n === 0조건으로 두 수의 공배수인지 확인합니다. 이 조건을 마지막에 검사하면 공배수가 'kit' 또는 'kat'으로 잘못 분류되어 버립니다.나머지 연산자(%) 활용: 어떤 수가 다른 수의 배수인지 판별할 때 나머지 연산자를 사용합니다. 나눈 나머지가 0이면 해당 수의 배수임을 의미합니다.
기본 매개변수: 화살표 함수의 매개변수에 기본값(
= 1)을 설정하여, 인자가 전달되지 않더라도 함수가 안전하게 동작하도록 처리했습니다.
예를 들어 m = 5, n = 6인 경우를 살펴보면, 5의 배수(5, 10, 15...)는 'kit'으로, 6의 배수(6, 12, 18...)는 'kat'으로 대체되며, 30처럼 두 수의 공배수에 해당하는 숫자만 'kitkat'으로 대체됩니다.