관리 메뉴

공부기록용

프로그래머스(LV 1. 평균구하기) 본문

✍️문제풀기✍️/JS_Programmers school

프로그래머스(LV 1. 평균구하기)

과부하가즈아 2023. 6. 19. 12:08

LV 1. 평균구하기

https://school.programmers.co.kr/learn/courses/30/lessons/12944

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

제한사항

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

입출력 예

  • arr = [1,2,3,4]
  • return = 2.5
<해결1>

for문을 활용해서 arr배열의 요소들을 하나씩 더하고 arr배열의 length로 나눠주고자 했다.
function solution(arr) {
    var answer = 0;
    var sum = 0;

    for(let i = 0; i < arr.length; i++){
        sum += arr[i] 
    }
    answer = sum / (arr.length)
    
    return answer;
}
console.log(solution([1,2,3,4]))
// 2.5​


for문으로 하는 거 조금 익숙해져서 다른 방법으로 도전해봤다.


🔴배운거
> .reduce() 
> .reduce 함수는 배열의 요소들을 하나씩 돌면서, callback함수의 실행 값을 누적하여 하나의 결과값을 반환한다.

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

//
numbers.reduce(callback[, initialValue])

// callback함수의 동작 logic
function callback((누산값, 현재요소값, 현재요소의index, 현재배열) => {
  return 다음누산값;
}, 초기누산값);

> callback 함수로는 4가지의 인수를 가집니다.

1. accumulator(누산값) - accumulator는 callback함수의 반환값을 누적합니다.

2. currentValue(현재요소값) - 배열의 현재 요소

3. index(현재요소의 index/선택사항) - 배열의 현재 요소의 인덱스

4. array(현재배열/선택사) - 호출한 배열

> reduce 메서드가 특별한 이유는 바로 이 콜백 함수의 첫 번째 파라미터인데,
reduce 메서드에서 이 
콜백 함수가 동작할 때 return 하는 값이 다음 콜백 함수의 첫 번째 파라미터로 전달되는 것이다.


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

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

console.log(sum); // 출력: 15

> 맨 처음에는 0_accumulator, return = 0_accumulator + 1_currentValue = 1_다음의 accumulator
> 1 + 2 = 3_다음의 accumulator
> 3 + 3 = 6
> 6 + 4 = 10
> 10 + 5 = 15
> 최종 마지막의 누적 값은 15


<해결>

function solution(arr) {
    var answer = 0;

    answer = arr.reduce((accumulator, currentValue) => {
        return accumulator + currentValue;
    }, 0);

    return answer / arr.length;
}
console.log(solution([1, 2, 3, 4]))

reduce에 대해 살짝 감이 오는거 같기두,,,,
그러니까 return한 식들의 합이나 결과가 아니고 reduce를 쭉 돌아가면서 최종 마지막에 나오는 값으로 출력하는거라는거 기억하기


function solution(arr) {
    var answer = 0;

    answer = arr.reduce((sum, current) => sum + current) / arr.length;

    return answer;
}
function solution(arr) {
    var answer = 0
    arr.forEach((e) => {
        answer += e
    })
    return answer / arr.length;
}
Comments