문제
프로그래머스
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 안에서 모두 해결이 가능하다.
반응형
'Algorithm > 프로그래머스: 기초 트레이닝' 카테고리의 다른 글
[프로그래머스] 문자열이 몇 번 등장하는지 세기 (Javascript) (1) | 2025.03.18 |
---|---|
[프로그래머스] 세로 읽기 (Javascript) (1) | 2025.03.05 |
[프로그래머스] 0 떼기 (Javascript) (0) | 2025.02.27 |
[프로그래머스] 간단한 식 계산하기 (Javascript) (0) | 2025.02.21 |
[프로그래머스] l로 만들기 (Javascript) (0) | 2025.02.20 |