개발/코딩테스트

[프로그래머스 | JavaScript] 등차수열의 특정한 항만 더하기

prpn97 2023. 6. 29. 20:21

<문제 설명>

두 정수 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씩 가감하는 ++, --만 익숙하다보니 분명 더 큰 값을 더하는 방법이 있는건 알았는데

어떻게 하는지를 까먹었다. 그래서 기억할겸 쉬운 문제였지만 포스팅하게 되었다.

 

프로젝트를 마치고, 엘리스에서의 과정을 수료하면서 맡겨진 것들에 최선을 다하다보니

코테 문제에 소홀했다. 다시 열심을 달려야겠다.  

728x90