알고리즘 풀이

항해99 2주차 알고리즘 풀이2

jann2 2021. 11. 8. 18:36

문제 설명

정수를 담고 있는 배열 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) {

    let answer = 0; //answer 값을 0으로 준다.

    

    //반복문을 arr의 i번째까지 돌려준 값과 answer(0)를 더해준 값이 answer가 된다.

    for(let i = 0; i < arr.length; i++) {

      answer += arr[i];  //answer=answer+arr[i]

    }

   //answer값에서 arr.length를 나누기해준다.

    return answer / arr.length;

  }

 

다른풀이

 

 

function average(array){

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

 

 

 

**reduce함수

reduce()파라미터로 누적값, 현재값, 인덱스, 원본배열 값이 들어갈 수 있다.

const arr =[1,2,3,4,5]

 

arr.reduce(function(acc,cur) {

    return acc + cur

}) //acc(누적값)과 cur(현재값)을 모두 더한 값이 결과값으로 나온다(15)

누적값 현재값 index

누적값 현재값 index
1 2 1
3 3 2
6 4 3
10 5 4
15    

 

 

-초기값 설정

//초기값이 0일때

arr.reduce(function(acc,cur) {

    return acc + cur

},0)

누적값 현재값 index
0 1 0
1 2 1
3 3 2
6 4 3
10 5 4
15    

 

//초기값이 10일때

arr.reduce(function(acc,cur) {

    return acc + cur

},10)

누적값 현재값 index
10 1 0
11 2 1
13 3 2
16 4 3
20 5 4
25    

결국 전체 더한값에 초기값을 더해준 값이 나온다.

 

//초기값이 배열 일때

arr.reduce(function(acc,cur) {

    acc.push(cur*2)//cur값에 2씩 곱한 배열을 return해서 []값에 push해준다.

    return acc

},[])

//결과값은 [2, 4, 6, 8, 10]

 

 

**화살표함수(arrow function expression)

array.reduce((a, b) => a + b) / array.length; }

//a와b를 더한 값이 function reduce에 return된다고 생각하면 된다.

 

 

function average(array){

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

//array.reduce((a, b) => a + b)---->a+b값을 모두 더한 누적값을 array.length로 나눠준다.(평균값 구하기)