본문 바로가기
Programming Knowledge/Algorithm

Programmers Lv 1. 자릿수 더하기 feat.reduce parseInt

by SheenaKaze 2024. 7. 2.

* 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만드시오.

ex n=123일 경우 1+2+3 =6이 return될 것

 

제한사항

n의 범위 : 100,000,000 이하의 자연수

function solution(n)
{
    var answer = 0;
    var m = String(n);
    
    for ( let i = 0; i < m.length; i++) {
        answer += parseInt(m[i]);
    }
    return answer;
}

프로그래머스의 Lv1. 자릿수 더하기를 위와 같이 for문과 숫자인 n을 string으로 변경하는 것을 통해 풀 수도 있지만,

JavaScript의 Reduce 함수를 사용하는 방법이 있어, 필자도 처음 사용해보기에 관련 내용 포스팅을 하게 되었습니다.

 

reduce 함수란?

reduce 함수는 배열(Array)의 각 요소를 순회하면서 하나의 값으로 줄이는(reduce) 함수입니다.

보통 배열의 모든 값을 합치거나 평균을 구하는 등, 배열을 하나의 값으로 변환할 때 사용합니다.

reduce 함수는 네 가지 인자를 받는데

1. accumulator : reduce 함수 호출을 통해 반환받을 값(누적값)

2. currentValue : 현재 배열 요소

3. currentIndex (선택사항) : 현재 배열 요소의 인덱스

4. array (선택사항) : reduce를 호출한 배열 

 

reduce 함수를 사용한 Js예시 몇 가지..

1. 배열의 합

const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((acc, cur) => {
  return acc + cur;
}, 0);

console.log(sum); // 15

 

2. 배열의 최대값 

const numbers = [1, 2, 3, 4, 5];

  const maxValue = numbers.reduce((acc, cur) => {
    return acc > cur ? acc : cur;
  }, 0);


  console.log(maxValue);
 

동작 과정

초기 설정

  • numbers 배열: [1, 2, 3, 4, 5]
  • 초기값 (acc): 0

각 단계별 비교 및 누적

  1. 첫 번째 순회
    • acc (초기값): 0
    • cur (현재 값): 1
    • 비교: 0 > 1? false
    • 결과: acc는 1이 됩니다.
  2. 두 번째 순회
    • acc: 1
    • cur: 2
    • 비교: 1 > 2? false
    • 결과: acc는 2가 됩니다.
  3. 세 번째 순회
    • acc: 2
    • cur: 3
    • 비교: 2 > 3? false
    • 결과: acc는 3이 됩니다.
  4. 네 번째 순회
    • acc: 3
    • cur: 4
    • 비교: 3 > 4? false
    • 결과: acc는 4가 됩니다.
  5. 다섯 번째 순회
    • acc: 4
    • cur: 5
    • 비교: 4 > 5? false
    • 결과: acc는 5가 됩니다.

최종 결과

  • 모든 요소를 순회한 후, acc에는 최대값인 5가 저장됩니다.

 

3. 객체 배열에서 특정 속성의 합 구하기 

const items = [
    { name: 'apple', quantity: 2 },
    { name: 'banana', quantity: 3 },
    { name: 'orange', quantity: 1 }
  ];
 
  const totalQuantity = items.reduce((accumulator, currentValue) => {
    return accumulator + currentValue.quantity;
  }, 0);
 
  console.log(totalQuantity); // 6

동작 과정

  1. 초기값으로 accumulator는 0입니다.
  2. 첫 번째 요소 { name: 'apple', quantity: 2 }의 quantity 값을 accumulator에 더합니다. (0 + 2 = 2)
  3. 두 번째 요소 { name: 'banana', quantity: 3 }의 quantity 값을 accumulator에 더합니다. (2 + 3 = 5)
  4. 세 번째 요소 { name: 'orange', quantity: 1 }의 quantity 값을 accumulator에 더합니다. (5 + 1 = 6)
  5. 모든 요소를 순회한 후 최종적으로 accumulator에는 6이 남습니다.