Javascript - level : 0 - 연속된 수의 합

HS K·2022년 12월 16일
0

문제설명

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

제한사항

1 ≤ num ≤ 100
0 ≤ total ≤ 1000
num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

function solution(num, total) {
    let x = ((2*total/num)+1-num)/2
    let answer=[];
    for(let i = 0; i<num;i++){
        answer.push(x+i)
    }
    return answer;
}

여러종류의 풀이 보기

1번

function solution(num, total) {
    var min = Math.ceil(total/num - Math.floor(num/2));
    var max = Math.floor(total/num + Math.floor(num/2));

    return new Array(max-min+1).fill(0).map((el,i)=>{return i+min;});
}

2번

function solution(num, total) {
    const a = (2 * total / num + 1 - num) / 2
    return Array(num).fill().map((_, i) => i + a)
}

3번

function solution(num, total) {
    for (let i = -50; ;i++) {
        if (i*num + (num*(num-1) / 2) === total) return new Array(num).fill(i).map((v, j) => v + j)
    }
}

후기

공차가 1인 등차수열이라는 관점으로 처음에 접근했다가 입출력 예시를 보니 그렇게 접근하는게 아니어서 헷갈렸다.
그리고 다른사람들의 풀이를 보니 다양한 풀이가 이렇게 많을 수 있구나. 하고 다시한번 알게된다.

profile
주의사항 : 최대한 정확하게 작성하려고 하지만, 틀릴내용이 있을 수도 있으니 유의!

0개의 댓글