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

JavaScript로 음수 정수의 자릿수 합계 구하기

문제 이해하기

음수 정수 하나를 입력받아 그 숫자의 각 자릿수 합을 반환하는 JavaScript 함수를 작성해야 합니다. 여기서 핵심은 마이너스(-) 기호 바로 뒤에 오는 첫 번째 자릿수가 음수로 취급된다는 점입니다.

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

-5456

출력 결과

첫 자릿수인 5는 음수로 계산되므로, 출력은 다음과 같습니다 −

(-5) + 4 + 5 + 6
10

예제 코드

이 문제를 해결하는 코드는 다음과 같습니다 −

const num = -5456;
const sumNum = num => {
    return String(num).split("").reduce((acc, val, ind) => {
        if(ind === 0){
            return acc;
        }
        if(ind === 1){
            acc -= +val;
            return acc;
        };
        acc += +val;
        return acc;
    }, 0);
};
console.log(sumNum(num));

코드 동작 원리

위 코드의 실행 흐름을 단계별로 살펴보겠습니다.

  1. 문자열 변환: String(num)으로 숫자를 문자열 "-5456"으로 바꾼 뒤, split("")으로 한 글자씩 나누어 ["-", "5", "4", "5", "6"] 배열을 만듭니다.
  2. 부호 건너뛰기: reduce()의 인덱스(ind)가 0일 때는 마이너스 기호이므로 아무 작업 없이 그대로 넘어갑니다.
  3. 첫 자릿수 음수 처리: 인덱스가 1일 때는 해당 숫자를 빼서(acc -= +val) 음수로 만듭니다. 초기값 0에서 5를 빼면 -5가 됩니다.
  4. 나머지 자릿수 더하기: 이후 인덱스부터는 숫자를 더해 최종 합계를 구합니다. 즉, -5 + 4 + 5 + 6 = 10이 됩니다.

실행 결과

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

10

참고: 단순 절댓값 합계가 필요한 경우

부호를 고려하지 않고 모든 자릿수를 단순히 더하고 싶다면 Math.abs()를 활용하는 것이 훨씬 간단합니다.

const num = -5456;
const absSum = String(Math.abs(num))
    .split("")
    .reduce((acc, val) => acc + Number(val), 0);
console.log(absSum); // 20

이 방식은 5 + 4 + 5 + 6 = 20을 반환하므로, 요구 사항에 따라 두 가지 방법 중 적절한 것을 선택하면 됩니다.