https://school.programmers.co.kr/learn/courses/30/lessons/120817
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

해결방법
function solution(numbers) {
let answer = 0;
for(let i = 0; i < numbers.length; i++){
answer += numbers[i];
}
answer = answer/numbers.length;
return answer;
}
사실 이렇게 for문을 이용하여 배열을 받아 각각 더해주면 쉽게 풀 수 있는 문제이다.
그렇다면 이렇게 시시한 문제를 왜 블로그에 기재하는가?
다른 사람이 푼 문제를 보았고, 이 방식이 새로워 공부하기 위해서 글로 남기기로 했다.
1. reduce 사용
function solution(numbers) {
var answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
return answer;
}
reduce를 사용했다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
Array.prototype.reduce() - JavaScript | MDN
developer.mozilla.org
reduce()
메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결괏값을 반환합니다.
즉, reduce()는 누산기이다. for은 단순 반복문이지만 문제와 같이 누적해서 계산을 해야하는 상황이라면 for 반복문보다 reduce() 함수를 이용하는 것이 조금 더 올바른 방향성이라고 생각했다.
기본 문법
arr.reduce(callback, initialValue)
여기서 callback 매개변수에는 다음과 같은 변수들을 갖는다.
(accumulator, currentValue, currentIndex, array)
// accumulator 누적값 (이전 반환값)
// currentValue 현재 요소
// currentIndex 현재 인덱스
// array 원본 배열
initialValue를 주지 않을 경우
[0,1,2,3,4].reduce((acc, cur) => acc + cur)
빈 배열일경우 에러가 발생한다.
initialValue를 주는 경우
[0,1,2,3,4].reduce((acc, cur) => acc + cur, 10)
빈 배열의 경우에도 에러가 발생하지 않는다.
initialValue이란?
초기값이다. 즉, 누적 계산을 하기 전에 시작 값을 주는 것이다.
위의 예제를 살펴본다면 initialValue를 주지 않은 예제의 경우 값은 0+1+2+3+4=10을 반환한다.
반면에 initialValue를 주는 예제의 경우 값은 10+0+1+2+3+4=20을 반환한다는 차이가 있다.
문제를 풀이한 사람들의 내용을 보면
function solution(numbers) {
var answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
return answer;
}
numbers라는 임의의 배열값을 기본값 0부터 더하겠다는 의지가 명확하다.
그렇다면 어떤 경우로 사용할 수 있는지까지 알아보고자 한다.
나와랏 GPT!
1. 객체 배열 값 합산
[{x:1},{x:2},{x:3}]
.reduce((acc, cur) => acc + cur.x, 0)
2. 배열 평탄화
[[1,2],[3,4]]
.reduce((acc, cur) => acc.concat(cur), [])
3. 빈도수 세기(해시맵 패턴)
["a","b","a"]
.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {})
위 코드는 GPT에게 물어봤을 때 자주 쓰이는 방법들이다.
1번 코드
[{x:1},{x:2},{x:3}]
.reduce((acc, cur) => acc + cur.x, 0)
말 그대로 객체 배열일 경우 합산하는 방법이다.
위에서 다룬 코드를 객체의 형식으로 계산한 내용이다.
2번 코드
[[1,2],[3,4]]
.reduce((acc, cur) => acc.concat(cur), [])
배열 평탄화부터 조금 어려웠다.
concat()은 두 배열을 합쳐 다른 배열을 반환할 수 있는 코드이다.
사용법
배열.concat(다른배열)
값은 [1,2,3,4]가 될 것이다.
3번 코드
["a","b","a"]
.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {})
acc["a"] = 1
acc["b"] = 1
acc["a"] = 1+ 1
이 순서대로 진행되어 값은 { a:2, b:1 }을 반환한다.
객체로 만들어서 객체의 값을 더해주는 방식으로 했을 경우 배열에서 얼마나 많은 빈도로 등장하는지를 쉽게 비교해 볼 수 있다.
'알고리즘' 카테고리의 다른 글
| [1일 1 알고리즘] D+5 - 정수 내림차순으로 배치하기 (0) | 2026.02.19 |
|---|---|
| [1일 1 알고리즘] D+4 - 최빈값 구하기 (0) | 2026.02.17 |
| [1일 1 알고리즘] D+3 - 숫자 문자열과 영단어(카카오 채용 연계형 인턴쉽) (0) | 2026.02.15 |
| [1일 1 알고리즘] D+2 - 유클리드 호제법 (0) | 2026.02.14 |
| [1일 1 알고리즘] D+1 - 몫 구하기 (0) | 2026.02.12 |