연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num
과 total
이 주어집니다. 연속된 수 num
개를 더한 값이 total
이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
num | total | result |
---|---|---|
3 | 12 | [3, 4, 5] |
5 | 15 | [1, 2, 3, 4, 5] |
4 | 14 | [2, 3, 4, 5] |
5 | 5 | [-1, 0, 1, 2, 3] |
* n = 연속된 자연수의 갯수
* m = 연속된 자연수의 마지막 원소 (ex. 1 ~ 4라면 -> m = 4)
* total = 연속된 자연수들의 합
* 1부터 m까지의 자연수의 합 구하는 공식
* -> (n * (n+1))/2 = total
* 마지막 원소 m을 구하는 공식
* -> m = ((total * 2) / n + n - 1) / 2;
* => 이 공식을 통해 알 수 있는 것
* 1. total/n === 구해야하는 굿자들의 중간값
* 2. n이 홀수라면 중간값보다 작은 수가 n/2개
* 3. n이 짝수라면 중간값보다 작은 수가 (n/2)-1개
function solution(n, total) {
let result = [];
let max = ((total * 2) / n + n - 1) / 2;
let min = max-n+1;
for(let i=min; i <= max; i++){
result.push(i)
}
return result;
}
💡 코드풀이
- n개 원소 중 마지막 원소(max)를 구하고, 이를 이용해 첫번째 원소(min)도 구한다 →
max-n+1
- 반복문을 돌면서 min부터 max까지의 자연수를 배열에 담고 리턴한다.
💡 어려웠던 점 & 개선점
- 문제를 해석하고 → 어떻게 풀어야하는지 생각하는 과정이 어려웠다.
- for문을 좀 더 슬기롭게 풀 수 있는 코드가 있을텐데, 그러지 못한거 같아 아쉽다.