티스토리 뷰
가우스의 덧셈 공식이란?
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;
}
'개발일지 > 문제 풀이' 카테고리의 다른 글
그리디 알고리즘[탐욕법] (0) | 2024.06.03 |
---|---|
[프로그래머스] 숫자 짝궁 (0) | 2024.03.18 |
[프로그래머스] 기사단원의 무기 (1) | 2024.02.26 |
가운데 글자 가져오기(substr, substring) (0) | 2024.01.19 |
없는 숫자 더하기 (0) | 2024.01.18 |