🗃️javascript/프로그래머스

배열의 평균값(Lv. 0)( reduce()에 대해 알아보자 )

하얀성 2022. 12. 27. 12:34

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.


제한사항
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예numbersresult
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0

입출력 예 설명

입출력 예 #1

  • numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

  • numbers의 원소들의 평균 값은 94.0입니다.

<제출 답안>

function solution(numbers) {
    var answer = 0;
    for(let i = 0; i < numbers.length; i++ ){
        answer += numbers[i]
    }
    return answer / numbers.length;
}

 


<보충>

 

대부분 보니.. numbers.reduce로 제출했더라.

밑의 참조글 참고해서 다시 만들어봄

 

const solution = (numbers) => numbers.reduce((a, c) => a+=c,0) / numbers.length 

// a = 누적장소, c= 재 처리되어지는 배열의 요소값이 들어가는 변수, c뒤가 index자리. 생략되면 배열의 0번째부터 자동으로 시작. 저 뒤의 0은 초기값, 즉 index[0]의 값이 0이란 소리임. 

a+=c가 return이 생략된 return 값임.

 

0을 없애서 아래와 같이 수정 가능

function solution(numbers) {
    var answer = 0;

    answer = numbers.reduce((a, c) => a + c)
    return answer / numbers.length ;
}

이렇게 고쳐줄 수도 있음//(a+b)가 answer안의 reduce 함수의 return 값임.

 

 


function solution(numbers) {
    var answer = 0;

    answer = numbers.reduce((a, c) => {return a + c;})
    return answer / numbers.length ;
                                    
}

 

둘다 코드실행이 성공으로 된다.


 

reduce, reduceRight

reduce를 덧셈 함수로 알고 계신 분들이 많은데, 대부분의 사이트에서 reduce 사용 예시를 덧셈으로 들고 있기 때문입니다. 심지어 저도 강좌에서 덧셈으로 예를 들었습니다... 하지만 reduce는 알고보면 매우 강력한 친구입니다. 함께 알아봅시다.

reduce 메서드는 다음과 같이 사용합니다. 배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초깃값);

이전값이 아니라 누적값이라는 것에 주의하셔야 합니다. 누적값이기 때문에 다양하게 활용할 수 있습니다. 먼저 흔한 덧셈 예시를 살펴봅시다.

result = oneTwoThree.reduce((acc, cur, i) => {
  console.log(acc, cur, i);
  return acc + cur;
}, 0);
// 0 1 0
// 1 2 1
// 3 3 2
result; // 6

acc(누적값)이 초깃값인 0부터 시작해서 return하는대로 누적되는 것을 볼 수 있습니다. 초깃값을 적어주지 않으면 자동으로 초깃값이 0번째 인덱스의 값이 됩니다.

result = oneTwoThree.reduce((acc, cur, i) => {
  console.log(acc, cur, i);
  return acc + cur;
});
// 1 2 1
// 3 3 2
result; // 6 

초깃값을 적었을 때와 안 적었을 때의 차이점이 보시이죠?

reduceRight는 reduce와 동작은 같지만 요소 순회를 오른쪽에서부터 왼쪽으로 한다는 점이 차이입니다.  

result = oneTwoThree.reduceRight((acc, cur, i) => {
  console.log(acc, cur, i);
  return acc + cur;
}, 0);
// 0 3 2
// 3 2 1
// 5 1 0
result; // 6

출처: https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d

 

https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d

 

www.zerocho.com