이 문제의 풀이에 앞서 javascript의 reduce 함수에 대해 알고 있으면 문제풀이가 수월해질 수 있다. 김태원 강사님께서 이해하기 쉽게 설명을 해주신 대로 정리를 하자면,
// 실제 reduce 함수 내부가 이렇게 짜여져 있는 것이 아닌 이해하기 위한 알고리즘이다.
function reduce(predicate, val) {
let result = val;
for(let i=0; i<a.length; i++) {
result = predicate(result, a[i]);
}
return result;
}
// 예시
a = [10, 11, 12, 13, 14, 15];
let answer = a.reduce((acc, v) => {
return acc+v; // return 값이 다시 acc로 간다.
}, 0);
console.log(answer);
✅ 75
일과를 마치고 돌아온 난쟁이가 7명이 아닌 9명일 때, 난쟁이 모두가 자신이 진짜 난쟁이라고 주장한다. 일곱 난쟁이의 키의 합이 100이고 아홉 난쟁이의 키가 주어졌을 때, 일곱 난쟁이를 찾는 문제
모든 난쟁이의 키의 합
을 구하고 그 합이 일곱 난쟁이가 아닌 난쟁이 2명의 키의 합 + 100
이라면 배열에서 제거하는 방식으로 접근했다.
function solution(arr) {
let answer = arr;
let sum = arr.reduce((acc, v) => acc + v, 0);
for(let i=0; i<arr.length-1; i++) {
for(let j=i+1; j<arr.length; j++) {
if(sum === (arr[i] + arr[j]) + 100) { // (sum - (arr[i] + arr[j])) === 100 과 같음
arr.splice(i, 1);
arr.splice(j-1, 1);
}
}
}
return answer;
}
let arr=[20, 7, 23, 19, 10, 15, 25, 8, 13];
console.log(solution(arr));
✅ [20, 7, 23, 19, 10, 8, 13]