등차수열의 특정한 항만 더하기
문제 설명
두 정수 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 array = Array(included.length).fill(0).map((v, i) => a + i * d);
return included.reduce((acc, cur, i) => acc + (cur && array[i]), 0);
}
- 등차수열 array를 생성한다.
- reduce 메서드를 이용해서 included의 요소가 true일 때만 acc에 더해준다.
다른 사람의 풀이
function solution(a, d, included) {
return included.reduce((acc, flag, i) => {
return flag ? acc + a + d * i : acc
}, 0)
}
이 풀이를 보고 나서 굳이 등차수열을 따로 생성할 필요 없이 reduce 메서드 하나로 해결할 수 있다는 점을 깨달았다..!
수정한 풀이
function solution(a, d, included) {
return included.reduce((acc, cur, i) => acc + (cur && a + i * d), 0);
}
이렇게 문제 풀이 시간 단축 시켰을 때 기분 좋음 ㅎㅎ