문제 소개
이번 글에서는 JavaScript 함수를 작성하여 하나의 숫자를 입력받고, 각 자릿수가 바로 왼쪽에 있는 자릿수로 나누어 떨어지는지 검사한 뒤, 그 결과를 불리언(Boolean) 배열로 반환하는 방법을 알아보겠습니다.
첫 번째 자릿수 앞에는 어떤 숫자도 존재하지 않기 때문에, 결과 배열의 첫 번째 요소는 항상 false가 됩니다.
해결 접근 방식
구현 과정은 다음과 같습니다.
1. 입력받은 숫자를 toString() 메서드로 문자열로 변환합니다.
2. 결과 배열을 첫 번째 값 false로 초기화합니다.
3. 두 번째 자릿수부터 마지막 자릿수까지 반복하면서, 현재 자릿수를 이전 자릿수로 나눈 나머지가 0인지 확인합니다.
4. 나누어 떨어지면 true, 그렇지 않으면 false를 배열에 추가합니다.
예제 코드
다음은 전체 구현 코드입니다.
const num = 73312;
const divisibleByPrevious = (n = 1) => {
const str = n.toString();
const arr = [false];
for(let i = 1; i < str.length; ++i){
if(str[i] % str[i-1] === 0){
arr.push(true);
}else{
arr.push(false);
};
};
return arr;
};
console.log(divisibleByPrevious(num));실행 결과
[ false, false, true, false, true ]
결과 해석
입력값 73312의 경우 결과가 다음과 같이 나옵니다.
- 첫 번째 자릿수 7: 앞의 숫자가 없으므로
false - 두 번째 자릿수 3: 3 ÷ 7은 나누어 떨어지지 않으므로
false - 세 번째 자릿수 3: 3 ÷ 3으로 나누어 떨어지므로
true - 네 번째 자릿수 1: 1 ÷ 3은 나누어 떨어지지 않으므로
false - 다섯 번째 자릿수 2: 2 ÷ 1로 나누어 떨어지므로
true
이처럼 문자열 변환과 모듈로(%) 연산만 활용하면 별도의 복잡한 수학 처리 없이도 각 자릿수 간의 나눗셈 가능 여부를 손쉽게 판별할 수 있습니다. 시간 복잡도는 숫자의 자릿수에 비례하는 O(n)으로 매우 효율적입니다.