초보 개발자의 성장 일기

연속된 수의 합 본문

Development/Algorithm

연속된 수의 합

YUNA 2023. 11. 22. 16:58

문제 설명

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

 

나의 문제 해결 방법

처음 시작할 값을 정하고 num의 길이만큼 1을 더하여 배열을 만든다. 첫 값은 total값을 num으로 나눈 후에 내림을 해주고 num값에 2를 나누고 내림한 값을 다시 빼주면 배열의 첫번째 값이 된다. num이 짝수일떄는 처음값에 1을 더한다.

function solution(num, total) {
    let firstNum = Math.floor(total/num) - Math.floor(num/2);
    let answer = [];
    if (num%2 !== 0) {
        for (let i = firstNum; answer.length <num; i++ ) {
            answer.push(i)
        } 
    } else {
        for (let i = firstNum + 1; answer.length <num; i++ ) {
            answer.push(i)
        }
    }    
    return answer;
}

 

다른 해결 방법

function solution(num, total) {
    const a = (2 * total / num + 1 - num) / 2
    return Array(num).fill().map((_, i) => i + a)
}
  • total에 2를 곱하고 num으로 나눠서 1을 더하고 num을 빼고 2로 나누면 num이 짝수인지 홀수인지 관계없이 모두 적용 가능하다. 
  • num의 길이만큼 undefined된 새로운 배열을 생성하고 맵함수로 두개의 매개변수를 받고 언더스코어(_)는 현재 요소를 나타내며, i는 현재 인덱스를 나타낸다.
  • 길이가 num이고 각 요소가 i + a로 계산된 값을 가지는 새로운 배열이 생성된다.

 

Array(num)

길이가 num인 새로운 배열을 생성한다.

 

fill(value, start, end)

원하는 범위를 변경하려는 값으로 전부 변경이 가능하다. 기본값은 undefined

const array1 = [1, 2, 3, 4];

console.log(array1.fill(0, 2, 4));

// Expected output: Array [1, 2, 0, 0]