일기 대신 코드 슬쩍

[프로그래머스][JAVA] Lv0. 연속된 숫자의 합 본문

코딩테스트/프로그래머스(JAVA)

[프로그래머스][JAVA] Lv0. 연속된 숫자의 합

코코자 2024. 3. 23. 15:05

문제 설명

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

입출력 예 설명

입출력 예 #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

  • 설명 생략

아이디어

무조건 연속된 수를 더하면 total이 나오는 것이므로 일단은 비효율적이지만 그냥 1부터 num만큼의 숫를 차례로 더해보는 for문을 이용하면 되지 않을까 하고 생각하였다.

근데 너무 비효율적인 것 같고.. 조금만 더 생각을 해보면

total = (더하는 거 시작하는 수 * num )+ (0부터 num-1까지 합)이다.

이 식을 활용하여 코드로 구현해봐야겠다.

class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        int sum= 0;
        for (int i =1;i < num; i++) {
            sum += i;
        }
        int start = (total - sum ) / num;
        
        for (int j = 0; j < num; j++) {
            answer[j] = start + j;
            
        }
        return answer;
    }
}

+1