CS/알고리즘_프로그래머스(new)

연속된 수의 합

Jedy_Kim 2023. 4. 10. 20:59
728x90

문제 설명

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

제한사항

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

 

자세한 내용은 해당 링크참조

문제 설계

1. 주어진 total과 num을 나눈 몫은 시작 숫자이므로 나눠준다.
2. 홀수/짝수 케이스가 다르므로 나눠준다.
3. [홀수]
 - 주어진 (num / 2)이 시작 인덱스가 되므로 값을 넣어준다.
 - 시작점으로부터 오른쪽 왼쪽을 기준값에 맞게 증가, 감소 시켜준다.
4. [짝수]
 - 주어진 값 "(total % num) - 1"이 시작 인덱스가 된다.
 - 시작점으로부터 오른쪽 왼쪽을 기준값에 맞게 증가, 감소 시켜준다.

// 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.*;
 
class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        
         // total / num => 몫은 시작 숫자이다.
        int startNum = total / num;
 
        // num이 홀수인 경우
        //  num / 2 => 앞,뒤로 몫만큼 증가
        if ( num % 2 != 0 ) {
 
            // 기준값 셋팅
            int orgNum = num / 2;
            answer[orgNum] = startNum;
 
            // 오른쪽 증가
            rightIncrease(answer, orgNum, orgNum);
 
            // 왼쪽 감소
            leftDecrease(answer, orgNum, orgNum);
        }
        // num이 짝수인 경우
        else {
            // 기준값 셋팅
            int orgNum = (total % num) - 1;
            answer[orgNum] = startNum;
 
            // num / 2 => 우측으로 몫만큼 증가 시켜준다.
            rightIncrease(answer, (num / 2), orgNum);
 
            // 전체 길이에서 몫만큼 증가된 길이를 빼준 값만큼 왼쪽으로 간다.
            int left = num - ((num / 2+ 1);
            leftDecrease(answer, left, orgNum);
        }
        
        return answer;
    }
    
    private static void rightIncrease(int[] answer, int conditionNum, int orgNum) {
        int incIdx = orgNum;
        for ( int i = 0; i < conditionNum; ++i ) {
            answer[incIdx + 1= answer[incIdx] + 1;
            ++incIdx;
        }
    }
 
    private static void leftDecrease(int[] answer, int condition, int orgNum) {
        int decIdx = orgNum;
        for ( int i = 0; i < condition; ++i ) {
            answer[decIdx - 1= answer[decIdx] - 1;
            --decIdx;
        }
    }
}
cs
반응형