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