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

JavaScript로 숫자 배열의 절댓값 합계 구하는 방법

문제 소개

양수와 음수가 섞여 있는 배열이 주어졌을 때, 모든 요소의 절댓값을 합산한 결과를 반환하는 JavaScript 함수를 작성해야 합니다. 단, 이 문제는 Math.abs() 같은 내장 라이브러리 함수의 도움 없이 직접 로직을 구현해야 한다는 조건이 있습니다.

예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.

const arr = [1, -5, -34, -5, 2, 5, 6];

기대 출력

각 요소의 절댓값은 1, 5, 34, 5, 2, 5, 6이며, 이를 모두 더한 최종 결과는 다음과 같습니다.

58

구현 아이디어

핵심 원리는 매우 간단합니다. 배열을 처음부터 끝까지 순회하면서 각 요소가 음수인지 판별하고, 음수라면 −1을 곱해 부호를 반전시킨 뒤 누적 합계에 더하면 됩니다. 양수라면 그 값을 그대로 더해주면 됩니다.

예제 코드

const arr = [1, -5, -34, -5, 2, 5, 6];

const absoluteSum = arr => {
   let res = 0;
   for(let i = 0; i < arr.length; i++){
      if(arr[i] < 0){
         res += (arr[i] * -1);
         continue;
      };
      res += arr[i];
   };
   return res;
};

console.log(absoluteSum(arr));

실행 결과

콘솔에는 다음과 같이 출력됩니다.

58

코드 동작 원리

  • 초기화: 최종 합계를 저장할 변수 res를 0으로 선언합니다.
  • 배열 순회: for 반복문으로 배열의 모든 요소를 하나씩 확인합니다.
  • 음수 처리: 현재 요소가 0보다 작으면 −1을 곱해 양수로 변환한 뒤 res에 더하고, continue로 다음 반복으로 넘어갑니다.
  • 양수 처리: 0 또는 양수라면 해당 값을 그대로 res에 더합니다.
  • 결과 반환: 모든 요소의 처리가 끝나면 누적된 절댓값 합계를 반환합니다.

더 간결하게 개선하기

continue 문 없이 삼항 연산자를 활용하면 동일한 로직을 더 짧고 읽기 쉽게 표현할 수 있습니다.

const absoluteSum = arr => {
   let res = 0;
   for(const num of arr){
      res += num * (num < 0 ? -1 : 1);
   }
   return res;
};

또한 자바스크립트 기본 배열 메서드인 reduce()를 사용하면 한 줄로도 구현할 수 있습니다. 내장 수학 함수(Math.abs)를 쓰지 않는다는 조건은 여전히 지켜집니다.

const absoluteSum = arr => arr.reduce((acc, cur) => acc + (cur < 0 ? -cur : cur), 0);

console.log(absoluteSum([1, -5, -34, -5, 2, 5, 6])); // 58

상황에 따라 가독성이 중요하다면 reduce 버전을, 학습 목적으로 로직을 명확히 드러내고 싶다면 첫 번째 for 반복문 버전을 사용하는 것이 좋습니다.