티스토리 뷰

가우스의 덧셈 공식이란?

1부터 n까지의 합을 구할때 사용하는 공식이다.

 

1. 첫번째 방법

s = 1+2+3+....+ (n-1) + n

 

2. 두번째 방법

s = n + (n-1) + 3 + 2 + 1

 

이 두방법을 합쳐보면

2s = (1+n) + (2+(n-1)) + (3+(n-2)) + ... + ((n-2)+3) + ((n-1)+2) + ((n+1))

즉 모든 각 쌍의 합이

(n+1) + (n+1) + (n+1) + (n+1) + (n+1) + (n+1) + (n+1) + (n+1)...이 된다.

 

그렇다면 마지막에 있는 수를 n이라고 했을때 최종 합은

s = n * (n+1) / 2 가 된다.

3을 예로 들면

tot = 1+2+3

tot = 3+2+1

2tot = (1+3)(2+2)(3+1) = 4+4+4 = 12

tot = 12 / 2 = 6

즉 1부터 3까지의 총 합은 6이 된다.

 

 

여기서 재미 있는것은 1씩 늘어난다면 총합이 주어진 n이 공차가 된다.

1+2+3 = 6

2+3+4 = 9

3+4+5 = 12

4+5+6 = 15


연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다.
연속된 수 num개를 더한 값이 total이 될 때,
정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

 

이런 문제가 주어졌다고 하면 위 공식을 그대로 사용하면된다.

 

최종값 tot가 주어진다.

또한 연속될수 num이 주어진다.

그렇다면 1부터 더해지는게 아니라면 n은 공차가 될것이다.

3이라는 num이 주어 진다면
연속된 수이므로
123, 234, 345로 넘어갈 것 이기때문이다.

이 얘기는 굳이 안해도 될것같기도? 그냥 쓰다보니까 신기해서 적었다.

 

암튼 우리는 주어진 조건을 최대한 활용해서 해결을 하면된다.

num = 5, tot = 35 라고 할때

? + ? + ? + ? + ? = 35 로 된다.

이 과정에서 중간값을 찾는다면 35 / 5 = 7이 된다.

 

? + ? + 7 + ? + ? = 35

 

중앙값을 기준으로 연속된 숫자들을 대칭적으로 배치하기 위해 num의 절반을 찾는다면?

num / 2 = 2.5에서 소수점을 버리면 2

2.5가 속해 있는게 7이라면 7-2는 5

즉, 5가 시작하는 수가 된다.

 

그렇게 5부터 5번째까지의 수를 찾게 된다면 35가 나오게 될것이다.

 

풀이 코드

function solution(num, total) {
  const middleNum = Math.floor(total / num);
  let startNum = 0;
  if (num % 2 !== 0) {
    let prev = Math.floor(num / 2);
    startNum = middleNum - prev;
  } else { // 짝수라면 나눈것 -1을 해주어야함.
    let prev = num / 2 - 1;
    startNum = middleNum - prev;
  }

  let arr = [];
  for (let i = 0; i < num; i++) {
    arr.push(startNum++);
  }
  return arr;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함