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

JavaScript에서 숫자의 각 자릿수를 제곱해 연결하는 방법

이번 글에서는 숫자를 인수로 받아, 원래 숫자의 모든 자릿수를 각각 제곱한 뒤 이어 붙여 새로운 숫자를 반환하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

예를 들어 숫자가 99라면 출력 결과는 다음과 같아야 합니다.

8181

그 이유는 9의 제곱이 81이기 때문입니다. 두 개의 자릿수 '9'가 각각 제곱되어(81, 81) 문자열처럼 연결되면 8181이 됩니다.

마찬가지로 숫자가 9119라면, 9→81, 1→1, 1→1, 9→81 순서로 계산되어 최종 결과는 811181이 됩니다.

구현 코드

이 함수는 다음과 같이 작성할 수 있습니다.

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));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

811181

코드 동작 원리

이 함수의 핵심 로직을 단계별로 정리하면 다음과 같습니다.

  • String(num): 숫자를 문자열로 변환하면 배열처럼 인덱스를 사용해 각 자릿수에 접근할 수 있습니다.
  • +numStr[i]: 단항 더하기(+) 연산자로 해당 자릿수를 다시 숫자 타입으로 변환합니다.
  • Math.pow(+numStr[i], 2): 변환된 숫자의 제곱을 계산합니다. ES2016 이상 환경이라면 지수 연산자(**)를 써서 numStr[i] ** 2로 표현할 수도 있습니다.
  • res += square: 제곱한 값들을 문자열 형태로 이어 붙여 최종 결과를 만듭니다.

대체 구현: map 활용하기

for 루프 대신 map 메서드를 사용하면 같은 로직을 더 간결하게 표현할 수 있습니다.

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

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

이 방식은 문자열을 개별 자릿수 배열로 분리한 뒤, 각 요소를 제곱하고 다시 하나의 문자열로 합치는 선언적인 흐름을 따르므로 가독성이 뛰어납니다.