프로그래머스 - 연속된 수의 합

이한결·2023년 1월 29일
0

프로그래머스

목록 보기
100/107
post-thumbnail

문제 설명

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

제한사항

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

입출력 예

입출력 예 설명

입출력 예 #1

num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.

입출력 예 #2

num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.

입출력 예 #3

4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.

입출력 예 #4

설명 생략

나의 코드

function solution(num, total) {
                 // 1. 0부터 num까지 배열을 만든다.
                // 2. 그 배열의 원소를 모두 합한다.
                // 3. (total - sum) / num으로 초기값을 구한다.
                // 4. 배열을 map을 돌려서 a와 초기값을 더한다.
                // 5. answer에 반환한다.

                let arr = [];
                let answer = [];

                for (let i = 0; i < num; i++) {
                    arr.push(i);
                }

                const sum = arr.reduce((a, b) => a + b);

                const offset = (total - sum) / num;

                arr.forEach((a) => answer.push(a + offset));

                return answer;
}

코드 리뷰

LV0 단계 문제임에도 불구하고 너무 어려웠다.

초기값을 구하는 것이 가장 관건이었다. 다른 사람들의 풀이를 참고해보니,
중간값을 구한 사람들도 있었다. 나는 초기값을 구하는 것을 선택했다.

과정은 위에 써져있는 것과 같다.
일단은 0부터 시작해서 num까지의 배열을 만들었다. 이렇게 배열을 만든 이유는
당연하게도 초기값을 구하기 위해서이다.

그것들을 전부 reduce()라는 함수를 통해 다 더하였다.

그럼 초기값 = (total - sum) / num 가 된다. 여기서 sum은 아까 위에서 배열을 만들고,
다 더한 값이다. 마지막으로

만약 total이 12이고 num이 3이라면 초기값은 3이 된다. 그럼 아까 만든 [0, 1, 2] 배열을
forEach()를 돌려 초기값과 배열안에 원소를 더하면 끝이 난다.

끝!

profile
평범한 삶을 위하여

0개의 댓글