코딩테스트

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

Beekei 2024. 11. 8. 02:58
반응형

문제 설명

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다.

연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

제한사항

- 1 ≤ num ≤ 100

- 0 ≤ total ≤ 1000

- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

입출력 예

입출력 예 #1

Input : 3(num), 12(total) / Output : [3, 4, 5]

입출력 예 #2

Input : 5(num), 15(total) / Output : [1, 2, 3, 4, 5]

입출력 예 #3

Input : 4(num), 14(total) / Output : [2, 3, 4, 5]

입출력 예 #4

Input : 5(num), 5(total) / Output : [-1, 0, 1, 2, 3]

입출력 예 #5

Input : 5(num), 0(total) / Output : [-2, -1, 0, 1, 2]

제출코드

  1. 합계(sum)와 total이 일치할때까지 반복하는 while문을 작성하였습니다.
  2. total 값부터 감소하는 숫자 num개를 가진 Array를 만들어 합계를 sum에 저장합니다.
  3. total이 0인 경우는 음수, 정수가 같은 개수를 가지도록 n을 2로 나누어 Array를 생성하고 합계를 sum에 저장하였습니다.
  4. sum과 total의 값이 같을때 while문이 종료되고 해당 Array가 반환됩니다.
import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int num, int total) {
        int sum = -1;
        int max = total;
        int[] result = new int[num];
        while (sum != total) {
            if (total == 0) {
                result = IntStream.rangeClosed(max - (num / 2), max + (num / 2)).toArray();
            } else {
                result = IntStream.rangeClosed(max - num + 1, max).toArray();
            }
            sum = Arrays.stream(result).sum();
            max--;
        }
        return result;
    }
}

다른방법

다른 분들의 풀이를 보니 훨씬 더 간단하게 작성하셨습니다.

total / num 값이 배열 중간에 들어가고, 만약 num이 짝수라면 중간에 배치할 수 없어서 중간 전 index에 배치되는 규칙이 있었습니다.

그래서 시작값 (total / num) - ((num - 1) / 2)부터 num개의 오름차순 배열을 반환하면 되는 것..!이였습니다.

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

이런 규칙도 생각해보지 않고 바로 코딩부터 들어갔는데 앞으론 규칙이 있는지 잘 살펴보아야 할 것 같슴다..

문제 유형에 따른 규칙을 잘 기억하도록...


출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

반응형