<문제 설명>
두 정수 a, d와 길이가 n인 boolean 배열 included가 주어집니다. 첫째항이 a, 공차가 d인 등차수열에서 included[i]가 i + 1항을 의미할 때, 이 등차수열의 1항부터 n항까지 included가 true인 항들만 더한 값을 return 하는 solution 함수를 작성해 주세요.
<입출력>
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) {
let answer = 0;
let inc = []
for(let i = a; i <=a+(d*(included.length-1)); i+=d){
inc.push(i)
}
for(let i = 0; i < inc.length; i++){
if(included[i]===true){
answer+=inc[i]
console.log(answer)
}
}
return answer;
}
등차수열은 동일한 수를 계속해서 반복해서 더해서 나열하게 된다.
첫 번째 항은 a, 공차는 d이므로 첫 번째 테스트케이스는 3부터 4씩 더하는 것이다.
3,7,11,15,19 이렇게 말이다.
1. 등차수열을 먼저 구한다.
for문으로 a에서 시작해서 included의 길이만큼의 수열을 구하면 되기 때문에
i의 최댓값은 3부터 4를 더할텐데, included의 첫 번째 요소는 3, 나머지는 4씩 더하게 된다.
그렇기 때문에 included에서 첫 번째 요소를 제외한 나머지의 값은 다 4씩 더하므로
included의 길이에서 첫 번째 요소인 1을 빼서 d를 곱한다. (4를 곱하는 것)
첫 번째는 3이고, 나머지는 4씩 더해진 수라는 것이다.
그리고 i+=d로 i를 d씩 더한다. 이렇게 하면 inc에는 3,7,11,15,19가 담긴다.
2. included에서 true인 값만 더한다.
inc를 for문으로 돌면서 included와 inc는 길이가 같기 때문에
included의 i번 인덱스가 true일 때 inc의 [i]값을 answer에 누적한다.
true일 때마다 해당 위치의 inc의 값을 더하는 것이다.
<코멘트>
for문을 1씩 가감하는 ++, --만 익숙하다보니 분명 더 큰 값을 더하는 방법이 있는건 알았는데
어떻게 하는지를 까먹었다. 그래서 기억할겸 쉬운 문제였지만 포스팅하게 되었다.
프로젝트를 마치고, 엘리스에서의 과정을 수료하면서 맡겨진 것들에 최선을 다하다보니
코테 문제에 소홀했다. 다시 열심을 달려야겠다.
'개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 | JavaScript] 수열과 구간 쿼리 3 (0) | 2023.07.04 |
---|---|
[프로그래머스 | JavaScript] 빈 배열에 추가, 삭제하기 (0) | 2023.07.03 |
[프로그래머스 | MySQL] 최솟값 구하기 (0) | 2023.06.05 |
[프로그래머스 | JavaScript] 카드 뭉치 (0) | 2023.05.31 |
[프로그래머스 | JavaScript] 명예의 전당(1) (0) | 2023.05.26 |