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을 곱해 부호를 뒤집은 값(절댓값)을 누적하고, continue로 이후 로직을 건너뜁니다.
  • 양수 처리: 음수가 아니라면 해당 값을 그대로 누적합니다.
  • 결과 반환: 순회가 끝나면 누적된 총합을 반환합니다.

참고: 내장 함수 사용이 허용된다면

실무에서는 제약 조건이 없다면 Math.abs()reduce()를 조합해 훨씬 간결하게 작성할 수 있습니다.

const absoluteSum = arr => arr.reduce((acc, cur) => acc + Math.abs(cur), 0);

다만 본 문제처럼 내장 함수 사용이 금지된 경우에는 위에서 소개한 부호 반전 방식이 가장 기본적인 해법이 됩니다.