문제 #

정수 n이 주어진다.

n은 0 < n <= 1000

이 때, n이하의 짝수를 모두 더한 값을 구하면 됩니다.

풀이 #

짝수의 합을 풀 수 있는 방법은 다양합니다.

n이 충분히 작으므로 1부터 n까지 반복하며 짝수를 누산하면 정답이 나오게됩니다.

시간에 제한도 없으니 이렇게 풀어도 괜찮겠으나 프로그래밍에 수학 공식을 얹어주면 더 깔끔하게 해결 되는 경우가 있습니다.

정수 n이하의 짝수의 합이므로 등차수열의 합공식을 사용하겠습니다.

수학을 이용한 풀이 #

등차수열의 합공식은 Sn=n2(a1+an)S_n = \frac{n}{2}(a_1+a_n)입니다.

이 때,

  • a1a_1은 첫 항
  • ana_n은 마지막 항
  • nn은 항의 개수입니다.

이 식을 활용하여 짝수의 합 공식을 만들어보겠습니다.

  • a1a_1은 첫 항 = 2
  • ana_n은 마지막 항 = n이 짝수인 경우 n, 홀수인 경우 n-1입니다.
  • nn은 항의 개수입니다. = 짝수는 항의 개수인 n에 반입니다.
    • 여기서 마지막 항이 짝수일지, 홀수일지 미리 알 수 없으므로 an/2a_n/2이 항의 개수입니다.

이를 다시 써보면

Sn=an/22(2+an)S_n = \frac{a_n/2}{2}(2 + a_n)입니다.

이를 javascript로 구현하면 아래와 같습니다.

function solution(n) {
  const isEven = n % 2 === 0;
  const max = isEven ? n : n - 1;
  return (max / 2) / 2 * (2 + max)
}