▶reduce() 함수를 사용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
두 정수 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가 적어도 하나 존재합니다.
입출력 예 & 설명
입출력 예 #1
- 예제 1번은 a와 d가 각각 3, 4이고 included의 길이가 5입니다. 이를 표로 나타내면 다음과 같습니다.
- 따라서 true에 해당하는 1항, 4항, 5항을 더한 3 + 15 + 19 = 37을 return 합니다.
입출력 예 #2
- 예제 2번은 a와 d가 각각 7, 1이고 included의 길이가 7입니다. 이를 표로 나타내면 다음과 같습니다.
- 따라서 4항만 true이므로 10을 return 합니다.
나의 풀이
먼저 등차수열의 식을 보면 위와 같습니다.
included 배열는 등차수열 배열의 길이이기 때문에 included의 길이만큼 반복해 주는 기본 for문을 선언해주고이 때 배열의 i 번째 요소가 true일 경우만 그 값을 합산하여 반환하는 문제이기 때문에 요소가 true일 때 등차수열의 공식을 사용하여 그 값을 더해주었습니다.
등차수열의 공식을 모른다면 마냥 쉬운 문제는 아니지만 등차수열을 알면 어렵지 않게 풀 수 있는 기초문제였습니다.
다른 풀이
reduce() 사용
등차수열 included 배열의 요소 중 true값만 합산하는 문제이기 때문에 배열의 요소를 하나의 값으로 도출할 때 주로 사용되는 앞선 ▶reduce() 포스팅에서 살펴본 reduce()함수를 사용했습니다.
reduce의 콜백함수 부분에 삼항 연산자를 사용하여 included배열의 각 요소(el)가 true일 경우에 등차수열 식을 사용해서 누적값(acc)에 저장을 해줍니다. false일 경우에는 누적하면 안 되기 때문에 그냥 누적값(acc)을 반환해 줍니다.
이때 주의 할 점은 초기값을 꼭 0으로 지정해주어야 합니다. 0으로 지정해주지 않는다면 1부터 시작하기 때문입니다.
콜백함수 부분을 이해하기 쉽게 if문으로 표현해 보면 위와 같습니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 글자 지우기 (JavaScript) (0) | 2024.01.31 |
---|---|
[프로그래머스] 날짜 비교하기 (JavaScript) (1) | 2024.01.29 |
[프로그래머스] 세로 읽기 (JavaScript) (1) | 2024.01.27 |
[프로그래머스] 배열 만들기 3 (2) | 2024.01.26 |
[프로그래머스] 특별한 이차원 배열 1 (JavaScript) (1) | 2024.01.24 |