Level 0) 연속된 수의 합 ⭐️

Doozuu·2023년 1월 31일
0

프로그래머스 (JS)

목록 보기
35/183

문제 설명

연속된 세 개의 정수를 더해 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]

풀이

첫 번째 예시의 경우 x, x+1, x+2 로 두고,
x + x+1 + x+2 = 12 를 계산하여 x=3을 구하고 변수에 값을 대입하여
3,4,5를 구해주는 방식으로 풀 수 있는데, 이를 이용해 공식을 도출할 수 있을 것이라 생각했다.

x항과 상수항을 분리하여 나타내면 x는 항상 num만큼 있고, 상수항은 1부터 num-1까지 수의 합이 되므로 아래와 같은 공식을 세울 수 있다.

num*x + (1~(num-1)까지의 합) = total

위 공식을 정리해 x에 대한 식을 세워주면 아래와 같다.

x = (total - (n*(n+1)/2 - n)) / num

x를 구한 후에는 x를 하나씩 증가시켜 답을 구해준다.(시행횟수는 num만큼 반복)

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

배열을 만들고 push하는 부분을 아래처럼 단축시킬 수 있다.

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

⭐️ map( ( _ , i ) => i + x )

index를 이용해 숫자를 이전 숫자+1 만큼씩 계속 증가시킬 수 있다.
ex. x = 3, 배열의 크기가 4일 때
0 + 3, 1 + 3, 2 + 3, 3 + 3

profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글