두 정수 a
, d
와 길이가 n인 boolean 배열 included
가 주어집니다. 첫째항이 a
, 공차가 d
인 등차수열에서 included[i]
가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included
가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
a | b | included | result |
---|---|---|---|
3 | 4 | [true, false, false, true, true] | 37 |
7 | 1 | [false, false, false, true, false, false, false] | 10 |
function solution(a, d, included) {
let newArr = [];
let result = 0;
// 초깃값 a이고 idx가 d씩 커지며, boolean 값을 가진 형태의 객체 배열(newArr)을 생성
for(let i = 0; i < included.length; i++){
newArr.push({value: a + (d * i), boolean: included[i]})
}
// newArr에서 boolean 값이 true인 조건으로 필터하여 배열을 생성(filterArr)
const filterArr = newArr.filter((e) => {
return e.boolean == true;
})
// filterArr의 value 값을 전부 더하고, 답을 리턴
for(let i = 0; i < filterArr.length; i++){
result = result + filterArr[i].value;
}
return result;
}
수학은 포기한지 10년이 지나서, 등차수열의 특정한 항만 더하라는 말에 머리가 어질어질했다. 입출력 예를 보면서, 반복적인 부분을 찾고 이거겠지? 하면서 푼 결과 풀기는 했다. 그런데 인간적으로 이런 문제는 반칙이 아닌가 싶다.
reduce를 사용해서 풀어보시는 것도 좋을것 같아요