[프로그래머스] 연속된 수의 합 / Level 0 / Java

알재·2023년 3월 28일
0

코딩 테스트

목록 보기
2/39

링크

문제링크

문제

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

제한사항

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

입출력

numtotalresult
312[3,4,5]
515[1,2,3,4,5]
414[2,3,4,5]
55[-1,0,1,2,3]

해결

total이 범위가 0~1000 사이 이기 때문에 연속된 정수라는 조건으로 배열에 들어갈 정수의 범위를 -1000 ~ 1000 사이라고 생각함.
1000에서 -1000까지 탐색하며 sum을 구하여 total과 비교하여 일치하면 반복문을 탈출.
answerList에 num만큼의 길이의 정수들을 추가하고 오름차순으로 정렬.

코드

import java.util.ArrayList;
import java.util.Comparator;

class Solution {
    public int[] solution(int num, int total) {
        int[] answer = {};
    
        int startNum = 1000;
        ArrayList<Integer> answerList =  new ArrayList<Integer>();
        
        while (startNum > -1000) {
            int sum = 0;
            int curNum = startNum;

            for (int i = 0; i < num; i++) {
                sum += curNum;
                curNum--;
            }

            if (sum == total) {
                break;
            }
            startNum--;
        }

        for (int i = 0; i < num; i++) {
            answerList.add(startNum);
            startNum--;
        }
        answerList.sort(Comparator.naturalOrder());
        answer = answerList.stream().mapToInt(Integer::intValue).toArray();

        return answer;
    }
}

배운점

처음에 n까지의 합 공식을 검색하던 중 1부터 n까지의 합공식을 검색하게되었지만 문제에선 음의정수도 다루고있기에 사용할 수 없어서 다른방식으로 코드를 풀게 되었다.
문제를 풀고 나서 다른사람 코드를 보던 중 n 에서 m까지의 합공식이 있다는것을 떠올리게 되어 더 쉬운 방식으로 코드를 풀수 있게 되었다.

N부터 M까지의 합
(수의 갯수) * (끝 수 + 첫번째 수) / 2
profile
저장소

0개의 댓글