Small Grey Outline Pointer 프로그래머스 [JavaScript] Lv.1 :: 평균 구하기
본문 바로가기
Dev./Algorithm Prac

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

by sso. 2022. 11. 22.
나의 풀이
function solution(arr) {
    var answer = 0;
    for(let i=0; i<arr.length; i++){
        answer += arr[i];
    }
    return answer/arr.length;
}

 

 

 

다른 사람의 풀이
function average(array){
  return array.reduce((a, b) => a + b) / array.length;
}

 

생각나는게 for문 밖에 없어서 for문 이용해서 문제 풀고 나니까

다른 사람들 풀이 중에 reduce로 문제 푼 방식이 있길래 reduce에 대해 찾아봤다

 

 


 

 

reduce()

배열의 각 요소를 순회하며 콜백함수의 실행 값을 누적한 합산 값을 반환한다

 

 

arr.reduce(callback[, initialValue])

callback 함수가 가지는 4가지 인수 

- accumulator 반환값 누적 [필수]

initalValue를 설정했을 경우 최초 호출 시 initalValue 값을 제공, 설정하지 않았을 경우 초기값은 배열의 첫번째 요소

- cuurentValue 배열의 현재 요소, 처리할 현재 요소 [필수]

initalValue 값을 제공하는 경우 초기값은 배열의 첫번째 요소, 제공하지 않았을 경우 초기값은 배열의 두번째 요소

- currentIndex 배열의 현재 요소의 인덱스, 처리할 요소의 인덱스

- array reduce()를호출한 배열

 

initialValue

- callback의 최초 호출에서 첫 번째 인수(accumulator 인수)에 제공 되는 값

initalValue를 제공하지 않은 경우 함수의 첫 번째 인수는 배열의 첫 번째 요소를 사용

 

initalValue 설정 안 했을 때

const num = [10, 20, 30, 40, 50];

const value = num.reduce((acc, cur, index, arr) => {
  console.log(acc);
  console.log(cur);
  console.log(index);
  console.log(arr);

  return acc + cur;
});

console.log(value); // 150

설정하지 않았기 때문에 배열의 첫번째 요소를 첫번째 인수로 사용

10부터 시작하여 현재 누적값 10 다음값 20 인덱스[1]

10부터 시작하여 현재 누적값 30 다음값 30 인덱스[2]

...

10부터 시작하여 현재 누적값 100 다음값 50 인덱스[4]

 

 

 

initalValue 설정할 때

const num = [10, 20, 30, 40, 50];

const value = num.reduce((acc, cur, index, arr) => {
  console.log(acc);
  console.log(cur);
  console.log(index);
  console.log(arr);

  return acc + cur;
}, 100);

console.log(value); // 250

 

initalValue 100으로 시작해서 현재 누적값 100 다음값 10 인덱스[0]

initalValue 100으로 시작해서 현재 누적값 110 다음값 20 인덱스[1]

...

initalValue 100으로 시작해서 현재 누적값 200 다음값 50 인덱스[4]

 

이런식으로 진행 됨

 

 

예시

var total = [0, 1, 2, 3].reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  0
);

 

 

 

const num = [10, 20, 30, 40, 50];

const value = num.reduce((a, b) => {
  return a + b;
});

console.log(value); // 150

 

 

 

728x90

댓글