문제 소개
이번 글에서는 JavaScript로 숫자 하나를 유일한 인수로 받아, 해당 숫자의 모든 자릿수를 각각 제곱한 뒤 그 결과를 이어 붙여 새로운 숫자를 반환하는 함수를 작성하는 방법을 알아보겠습니다.
문제 이해하기
예를 들어 입력 숫자가 다음과 같다면,
const num = 12349;
출력 결과는 다음과 같아야 합니다.
const output = 1491681;
그 이유는 각 자릿수를 제곱하면 1² = '1', 2² = '4', 3² = '9', 4² = '16', 9² = '81'이 되고, 이 값들을 문자열로 이어 붙이면 '1' + '4' + '9' + '16' + '81' = 1491681이 되기 때문입니다.
구현 아이디어
핵심 로직은 다음 세 단계로 정리할 수 있습니다.
- 숫자를 문자열로 변환한 후
split('')을 사용해 각 자릿수로 이루어진 배열을 만듭니다. - 배열을 순회하면서 각 자릿수를 제곱합니다.
- 제곱한 값을 문자열로 이어 붙인 뒤, 최종적으로 숫자로 변환하여 반환합니다.
예제 코드
const num = 12349;
const squareEvery = (num = 1) => {
let res = '';
const numStr = String(num);
const numArr = numStr.split('');
numArr.forEach(digit => {
const square = (+digit) * (+digit);
res += square;
});
return +res;
};
console.log(squareEvery(num));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
1491681
더 간결한 대안: map()과 join() 활용
forEach와 문자열 누적 대신 map()과 join()을 조합하면 동일한 기능을 훨씬 간결하게 구현할 수 있습니다.
const squareEvery = (num = 1) =>
+String(num)
.split('')
.map(d => (+d) ** 2)
.join('');
console.log(squareEvery(12349)); // 1491681이 방식은 중간 변수 없이 한 줄의 함수 표현식으로 처리할 수 있어 가독성이 좋고, 실무에서도 널리 사용되는 패턴입니다.