본문 바로가기

코딩테스트

[코테] 프로그래머스 Lv.1 평균구하기

[문제]

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

 

[제한사항]

- arr은 길이 1 이상,  100 이하인 배열입니다.

-arr의 원소는  -10,000이상 10,000 이하인 정수입니다.

 

[입출력 예]

arr return
[1,2,3,4] 2.5
[5,5] 5

 

[내가 적은 답]

function solution(arr) {
    var answer = 0;
   arr.map(n=>answer+=n);
  return answer/arr.length;
}

 

[다른 사람 답]

function average(array){
  return array.reduce((a, b) => a + b) / array.length;
}

 

다른 분들의 풀이를 보다가 더 간단한 코드가 있어서 정리해보려고 한다

배열을 돌면서 뭘 반복하라고 하면 map 함수 밖에 안떠올랐는데 한 번도 사용해본 적 없는 reduce가 나왔다

reduce가 뭐지? 어떻게 쓰는 거지?

 

 

reduce 메서드

[사용법]

 

배열.reduce((누적값, 현재값, 인덱스, 요소) => { return 결과 }, 초기값);

 

[사용 예시]

 

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array) {
  return accumulator + currentValue;
}); //10
[0, 1, 2, 3, 4].reduce( (prev, curr) => prev + curr ); //10

 

만약 reduce() 함수 호출에서 초기값을 제공한 경우, accumulator는 초기값과 같고 currentValue는 배열의 첫 번째 값과 같다. 초기값을 제공하지 않았다면, accumulator는 배열의 첫 번째 값과 같고 currentValue는 두 번째와 같습니다.

 

 

위 두 코드는 결과값이 같다. 두 번째 코드가 화살표 함수를 사용하여 코드를 더 간단하게 표현한 것이다.

reduce 함수는 누적값을 활용해야 하는 상황에서 매우 편리할 것 같다.