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

JavaScript로 숫자의 각 자릿수를 제곱해 이어 붙이는 방법

문제 개요

이번 글에서는 하나의 숫자를 입력받아, 그 숫자의 모든 자릿수를 각각 제곱한 뒤 결과를 이어 붙여 새로운 값을 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.

예를 들어 입력값이 다음과 같다면 −

9119

출력 결과는 다음과 같아야 합니다 −

811181

그 이유는 9²는 81이고, 1²는 1이기 때문입니다. 즉, 각 자릿수를 제곱한 값(81, 1, 1, 81)을 순서대로 이어 붙이면 811181이 됩니다.

접근 방법

이 문제는 다음 세 단계로 해결할 수 있습니다.

  1. 숫자를 문자열로 변환해 각 자릿수에 인덱스로 접근합니다.
  2. 각 자릿수를 다시 숫자형으로 변환한 후 제곱합니다.
  3. 제곱한 값들을 문자열 연결 방식으로 이어 붙입니다.

예제 코드

다음은 위 접근 방법을 구현한 코드입니다 −

const num = 9119;
const squared = num => {
    const numStr = String(num);
    let res = '';
    for(let i = 0; i < numStr.length; i++){
        const square = Math.pow(+numStr[i], 2);
        res += square;
    };
    return res;
};
console.log(squared(num));

코드 설명

  • String(num): 숫자를 문자열로 변환해 각 자릿수에 인덱스로 접근할 수 있게 합니다.
  • +numStr[i]: 단항 더하기(+) 연산자로 문자열 형태의 자릿수를 숫자형으로 변환합니다.
  • Math.pow(+numStr[i], 2): 해당 자릿수의 제곱을 계산합니다.
  • res += square: 계산된 제곱 값을 문자열 연결 방식으로 누적합니다.

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −

811181

대안: map() 메서드 활용하기

for 반복문 대신 배열 메서드를 사용하면 코드를 훨씬 간결하게 작성할 수 있습니다.

const squared = num =>
  String(num)
    .split('')
    .map(d => d ** 2)
    .join('');

console.log(squared(9119)); // 811181

split('')으로 문자열을 한 글자씩 나눈 배열로 만들고, map()으로 각 자릿수를 제곱한 뒤, join('')으로 다시 하나의 문자열로 합치는 방식입니다. 참고로 반환되는 값은 숫자가 아닌 문자열이라는 점을 유의하세요. 필요하다면 Number()BigInt()로 변환해 사용할 수 있습니다.