Algorithm/프로그래머스: 기초 트레이닝
[프로그래머스] 등차수열의 특정한 항만 더하기 (Javascript)
집으로 감자
2025. 3. 12. 09:41
문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
요구사항
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
제한조건
- 1 ≤ a ≤ 100
- 1 ≤ d ≤ 100
- 1 ≤ included의 길이 ≤ 100
- included에는 true가 적어도 하나 존재합니다.
입출력
a d 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) {
const arr = Array(included.length).fill(a).map((num, idx) => num + idx * d);
const answer = included.reduce((a, c, i) => {
return c ? a + arr[i] : a;
}, 0);
return answer;
}
[3, 7, 11, 15, 19]의 배열을 먼저 만들어야겠다고 생각했다.
const arr = Array(included.length).fill(a).map((num, idx) => num + idx * d);
그래서 `Array`와 `fill`을 이용해서 included 배열의 길이 만큼 a로 차있는 배열을 하나 만들었다.
[3, 3, 3, 3, 3]의 형태가 된다.
이후 map을 이용해서 인덱스 * d를 더한 배열로 만들어주었다.
최종적으로 [3, 7, 11, 15, 19]의 형태가 된다.
const answer = included.reduce((a, c, i) => {
return c ? a + arr[i] : a;
}, 0);
reduce를 이용해서 하나의 값을 도출하려고 했다.
included의 값이 true일 때만 더해주는 로직이다.
테스트를 무사히 통과하긴 했지만,
분명 이거보다 간결하게 짤 수 있는 코드가 존재할 것 같았다.
다른 해결방법
⚒️ 사용한 도구: `reduce`
function solution(a, d, included) {
const answer = included.reduce((acc, c, i) => {
return c ? acc + a + d * i : acc;
}, 0);
return answer;
}
내가 구현했던 코드처럼 `reduce`를 사용했지만 훨씬 간결하다.
새롭게 배열을 만들지 않아도 reduce 안에서 모두 해결이 가능하다.
반응형