본문 바로가기
JAVASCRIPT/코딩테스트

프로그래머스 레벨 1 - 평균 구하기 정답 및 풀이[자바스크립트]

by 진짠 2023. 8. 22.
728x90

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

 

프로그래머스

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

programmers.co.kr

 

문제

정수를 담고 있는 배열 arr의 평균값을 return 하는 문제. 문제 자체는 너무나도 간단해요. 

 

제한사항

배열 arr은 길이 1 이상 100 이하, 그리고 원소는 -10,000 과 10,000 사이의 정수에요.

단순 for문을 돌려서 풀어도 성능에는 이슈가 없었기 때문에 신경써서 볼 부분은 아닌 듯 하네요.

 

function solution(arr) {
    var answer = 0; //배열의 값을 모두 더하기 위한 변수
    for(let i=0;i<arr.length;i++) { //for문을 돌려 값을 모두 넣어준다.
        answer += arr[i];
    }
	// 더한 모든 수를 배열의 길이로 나눈다.
    return answer / arr.length;
}

 

소스 내에 주석으로 모든 풀이가 가능한 간단한 답이에요. 수학에서 평균을 배울 때 각각의 값을 모두 더하고 그 수의 갯수만큼 나눈다, 라는 공식을 알고 있어서 그대로 풀이에 적용했어요.

 

다른 사람의 풀이

for문 대신 사용할 수 있는 다른 방법들이 있었어요.

 

먼저 배열에 reduce() 함수를 적용하여 각 값을 더해주는 방법.

 

reduce() 함수는 개념을 이해했는데도 오랜만에 보면 다시 헷갈리네요. 자주 써먹지 않으면 금방 까먹어버리는데 머리가 안좋은건지 다른 분들도 그런건지는 모르겠지만..

 

reduce() 함수의 기본은 배열의 값 하나하나씩 순회를 돌며 '현재의 값' 과 '순회를 돌며 이벤트가 적용된 총 값' 을 비교하여 계산을 할 수 있어요.

 

화살표 함수를 써서 가장 간단한 예제를 이 문제에 적용시켜 보면

arr.reduce((a,b) => a+b)

이런 형태가 될거에요. 이 예제의 풀이는

arr이라는 배열이 [1,2,3] 이라고 가정했을 때, reduce() 함수는 원소의 갯수인 3만큼 순회를 돌아요.

 

그리고 3번의 순회를 돌며 바라보고 있는 값을 a로 갖고있어요.

 

그리고 b에는 순회를 돌 때마다 적용이 된 값을 갖고있어요.

 

작동순서를 살펴보면

 

첫번째, a에는 1을 갖고 있고 b는 0을 갖고 있는 상태. a+b = 1+0 = 1

두번째, a에는 2를 갖고 있고 b는 1을 갖고 있는 상태(첫번째에서 계산한 값이 1이기 때문.) a+b = 2+1 = 3

세번째, a에는 3을 갖고 있고 b는 3을 갖고 있는 상태(두번째에서 계산한 값이 3이기 때문.) a+b = 3+3 = 6

 

그리하여 최종적으로 6이라는 수를 return 하게 될거에요.

 

이 예제를 활용하여 배열의 각 값을 for문을 사용하지 않고 더할 수 있게 돼요.

 

reduce() 함수는 그 외에도 순회하고 있는 상태의 index와 총 배열의 형태까지 총 4개를 인자로 가질 수 있어요.

 

자세한 reduce()의 함수는 아래의 링크에서 보고 확인해보세요.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org

이건 예전 코딩 테스트 풀 때도 적은 개념이지만 제가 헷갈려서 다시한번 정리해봤어요.

728x90

댓글