숫자를 다룰 때 각 자릿수의 값을 분리하여 표현하는 확장 형태(expanded form)를 문자열로 만들어야 하는 경우가 있습니다. 예를 들어 숫자 124가 주어졌을 때, 이 숫자를 입력받아 아래와 같은 확장 형태의 문자열을 반환하는 함수를 작성한다고 가정해 보겠습니다.
'100+20+4'
즉, 각 자릿수에 해당하는 자릿값(place value)을 계산한 뒤, 덧셈 기호(+)로 연결하면 됩니다. 백의 자리는 1×10² = 100, 십의 자리는 2×10¹ = 20, 일의 자리는 4×10⁰ = 4가 되는 원리입니다.
구현 코드
다음은 위 로직을 자바스크립트로 구현한 코드입니다.
const num = 125;
const expandedForm = num => {
const numStr = String(num);
let res = '';
for(let i = 0; i < numStr.length; i++){
const placeValue = +(numStr[i]) * Math.pow(10, (numStr.length - 1 - i));
if(numStr.length - i > 1){
res += `${placeValue}+`
}else{
res += placeValue;
};
};
return res;
};
console.log(expandedForm(num));코드 동작 방식
이 코드의 핵심 로직은 다음과 같습니다.
먼저 String()을 사용해 숫자를 문자열로 변환합니다. 그러면 각 자릿수에 인덱스로 접근할 수 있게 됩니다. 이후 반복문을 돌면서 현재 자릿수에 Math.pow(10, 자릿수 위치)를 곱해 자릿값을 계산합니다. 마지막 자릿수가 아니라면 값 뒤에 '+'를 붙여 연결하고, 마지막 자릿수라면 덧셈 기호 없이 값을 추가합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
100+20+5
이처럼 문자열 변환과 반복문만으로도 별도의 복잡한 수학 연산 없이 손쉽게 숫자의 확장 형태를 구할 수 있습니다. 필요하다면 filter()나 map() 같은 배열 메서드를 활용해 더 간결하게 리팩토링할 수도 있습니다.