프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 연속된 수의 합(Java)

Sigfriede 2023. 7. 16. 01:00

  문제 설명

  연속된 세 개의 정수를 더해 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[] answer = new int[num];
        int mid = total / num;
        int first;
        if (num % 2 == 0) {
            first = mid - num / 2 + 1;
        } else {
            first = mid - num / 2;
        }
        for (int i = 0; i < num; i++) {
            answer[i] = first++;
        }
        return answer;
    }
}

  answer의 배열 크기는 num으로 지정합니다.

  변수 mid를 생성합니다. 이는 연속된 수의 중앙값으로, total을 num으로 나눈 값을 할당합니다.

  변수 first를 생성합니다. 이는 연속된 수에서 첫 번째 값을 담을 것입니다.

  if문에서 num을 2로 나눈 나머지가 0이라면, 즉 num이 짝수라면 mid에서 num을 2로 나눈 값을 뺀 뒤 1을 더한 값을 first에 할당합니다.

  앞선 조건에 해당하지 않는다면, 즉 num이 홀수라면 mid에서 num을 2로 나눈 값을 뺀 뒤 first에  할당합니다. 연속된 수의 합은 중앙값을 기준으로 양쪽에 수가 분포하고 있을 것입니다.

  for문이 num만큼 순회합니다.

  answer의 i 번째 인덱스에 first의 증가값을 할당합니다.