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 안에서 모두 해결이 가능하다.

 

 

반응형