연속된 수의 합

Haizel·2023년 4월 28일
1

🧬 알고리즘 풀이

목록 보기
22/53
post-thumbnail

문제 설명

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

입출력 예

numtotalresult
312[3, 4, 5]
515[1, 2, 3, 4, 5]
414[2, 3, 4, 5]
55[-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;
}

💡 코드풀이


  1. n개 원소 중 마지막 원소(max)를 구하고, 이를 이용해 첫번째 원소(min)도 구한다 → max-n+1
  2. 반복문을 돌면서 min부터 max까지의 자연수를 배열에 담고 리턴한다.

💡 어려웠던 점 & 개선점


  1. 문제를 해석하고 → 어떻게 풀어야하는지 생각하는 과정이 어려웠다.
  2. for문을 좀 더 슬기롭게 풀 수 있는 코드가 있을텐데, 그러지 못한거 같아 아쉽다.
profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글