가우스 공식(등차수열의 합)

가우스 공식(등차수열의 합 공식)

선생님이 학생들을 조용하게 하기 위해 1부터 100까지 더하는 문제를 냈는데,
가우스가 순식간에 답을 제출했다!

1부터 100까지 더한다면 그에 역순인 100부터 1까지를 순서대로 더하고
(1+100,2+99,3+98,4+97 ... 100+1)
그러면, 각각 더한 101 이라는 숫자가 100개 나오게 되고
모두 더하면 10100인데(101이 100개니까),
실제 더하려고 했던 1부터 100까지의 수에서 한번 더 더해진 모양이니
10100 을 2로 나누면 5050.


어떻게 사용할까?

n(x + y)/2 를 x, y 로만 표현하면

((y - x) + 1)(x + y) / 2 이다.
(x 와 y 의 관계는 x < y이다.)

예제

  1. 프로그래머스 두 정수 사이의 합

두 정수 a, b 가 주어진다.
둘 중 어느 값이 큰 값인지 모른다.
두 정수 사이의 숫자를 모두 더한 값을 구하여라

function solution(a, b) {
  return ((Math.abs(a - b) + 1) * (a + b)) / 2;
}

a 와 b 중 큰 값이 무엇인지 모르기 때문에 Math.abs() 사용했다.


  1. 프로그래머스 부족한 금액 계산하기

이용료(price), 보유금액(money), 이용횟수(count) 가 주어진다.
n번 이상 이용할 경우, price 가 n배 증가한다.
money를 가지고 count만큼 이용했을 때, 부족한 금액을 구하여라
(부족하지 않다면, 0을 리턴한다)

function solution(price, money, count) {
  const result = (price * count * (count + 1)) / 2 - money;
  return result > 0 ? result : 0;
}

예시 : price = 3, money = 20, count = 4

1회 이용 시, 20(money) - (price * count(1)) === 17
2회 이용 시, 17(money) - (price * count(2)) === 11
3회 이용 시, 11(money) - (price * count(3)) === 2
4회 이용 시, 2(money) - (price * count(4)) === -10
부족한 돈은 10이다.

공식에 대입해보면, result = (3 * 4 * 5) / 2 - 20 === -10

한번 더 해보자
price = 5, money = 43, count = 18
result = 5 *18 *19 /2 - 43 === 812

다른 함수에 적용했을 때의 값과 똑같다

좋은 웹페이지 즐겨찾기