JAVA/프로그래머스 코딩테스트 입문

[프로그래머스 LV.0] 연속된 수의 합

sundori 2024. 12. 15. 20:49

목차

    문제 설명

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


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

     

     

    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]
    class Solution {
        public int[] solution(int num, int total) {
            int[] result = new int[num];
            int sum = 0;
    
            for(int i = 1; i <= num; i++){
                sum += num - i; 
            }
           int start = (total - sum) / num;
            // 결과 배열 생성
            for (int i = 0; i < num; i++) {
               result[i] = start + i;
            }
    
            return result;
        }
    }

    요즘 모든 문제들을 수식화 할려고 하다보니 문제가 잘 풀리는 것 같다.
    이번 문제의 경우 연속된 숫자가 힌트였다.
    num = 3, total= 12라고 되어있는데

    (x) + (x +1) + (x + 2) = 12 인 것이다.

    결국에는 3x +3 = 12 --> 3x = 9이므로 x는 3이다.
    3, 3+1, 3+2 = 3, 4, 5 인것이다.

     

    sum은  (x) + (x +1) + (x + 2)에서 1와 2의 합을 말하는 것이다. 이를 수식에 넣어보면

    3x + sum = total(3x + 3 = 12)이다.

     

    3x = total - sum(3x = 12 -3)이다.

    x = (total - sum) / num이다. x의 계수는 num와 동일하다.