[js] 짝수의 합 (lv.0, 정답률 90%)

sookyoung.k·2024년 4월 23일
0
post-thumbnail

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 0 < n ≤ 1000

😗 나의 풀이

function solution(n) {
    let evenArr = [];
    for (let i = 2; i <= n; i += 2) evenArr.push(i);

    evenArr.reduce((acc, cul, i) => {
        cul = acc + cul;
        return (evenArr[i] = cul);
    }, 0);
    return evenArr.length == 0 ? 0 : evenArr[evenArr.length - 1]
}

우선 n까지의 숫자 중에서 짝수인 배열을 만들었다.
그리고 누적된 값으로 현재 위치의 값을 업데이트 해준 후 새로 만든 후 마지막을 반환해준다. 하지만 빈 배열일 수도 있기 때문에 삼항연산자를 통해 빈 배열일 때는 0을 반환한다.

reduce를 왜 이렇게 썼지?... 그 땐 이 방법만 떠올랐음.

하지만, 짝수의 합을 직접 계산하는 더 간단한 방법이 있다.

😙 다른 풀이 1

function solution(n) {
    var half = Math.floor(n/2);
    return half*(half+1);
}

Math.floor(n/2)를 하여 n까지의 숫자 중 짝수의 개수를 구할 수 있다. 숫자를 내림하여 가장 가까운 정수를 반환해준다.

구한 짝수의 개수를 이용해서 등차수열의 합 공식을 통해 누적 합산값을 구할 수 있다.

등차수열의 첫 번째 항 a는 2, 공차 d는 2이므로 n번째 항까지의 합은 n/2 * (2 + (n-1) *d로 표현할 수 있다. 이 공식을 간략하게 하면 n/2 * (1+n)이 된다.

따라서 짝수의 개수와 그 개수에 1을 더한 값을 곱하면 짝수의 합을 계산할 수 있는 모든 값을 제공한다.

😘 다른 풀이 2

function solution(n) {
    var answer = 0;

    for(let i=2 ; i<=n ; i+=2)
        answer += i;

    return answer;
}

오... i를 2씩 증가시키기

🥰 다른 풀이 3

function solution(n) {
  return Array(n)
    .fill()
    .map((_, i) => i + 1)
    .filter((v) => v % 2 === 0)
    .reduce((acc, cur) => acc + cur, 0);
}
  • n의 크기를 가진 새로운 배열을 fill() 함수를 통해 생성한다.
  • map() 함수를 사용하여 각 요소를 순회하고, 각 요소의 인덱스에 1을 더한 값을 새로운 배열의 요소로 만든다.
  • filter 함수를 사용하여 짝수인 요소만을 걸러내 새로운 배열을 만든다.
  • reduce 함수를 사용하여 누적 합산!

체이닝 메서드 개쩐다...!

profile
영차영차 😎

0개의 댓글