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

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

풀이보기
더보기
function solution(num, total) {
    let result = [];
    let middle = Math.floor(total / num);
    
    for(let i = middle - 1; result.length < Math.round(num / 2) - 1; i--) {
        result.unshift(i);
    }
    
    for(let i = middle; num > result.length; i++) {
        result.push(i);
    }
    
    return result;
}

먼저 totla / num을 통해 중간 값을 찾아주고, 이 값을 통해 나머지 수를 구하면 된다.

먼저 중간 값 이전 수들을 삽입해줄 것이다.

중간 값 - 1부터 시작해서 i를 하나씩 감소시켜주고, result.length가 num의 반절이 될 때까지 반복시켜주면 된다.

여기서 Math.round(num/2) -1을 하는 이유는, num이 짝수인 경우를 고려해야하기 때문이다.

 

만약 num이 4고 total이 14라면 결과는 [2, 3, 4, 5]이다.

그럼 현재 코드에서는 middle에는 3이 들어가게 될텐데, 단순히 num의 절반 값까지 반복하게 되면 [1, 2, 3, 4]가 나오게 된다.

그렇기 때문에 홀수면 딱 나눠지지 않기 때문에 반올림을 해줘서 -1을 빼주면 되고,

짝수라면 딱 나눠떨어지기 때문에 -1을 해주면 원하는 만큼 반복할 수 있다.

또한 중간 값부터 작아지는 것이기 때문에 unshift를 통해 요소 앞에 추가될 수 있게 해준다.

 

그 다음 중간 값을 포함해서 result.length가 num과 같아질 때까지 push 해주면 끝이다!

 

+ Recent posts