나는 이게 연속된 수의 합이라서 처음에 투 포인터 알고리즘을 생각했다.
하지만 기준 배열의 시작점을 어떻게 잡아야할지 도무지 감이오지 않았다.
그래서 접근법을 찾아보았다.
기본형 : [1,2,3,4,5] -> num = 5, total = 15
오른쪽으로 한칸 이동 : [2,3,4,5,6] -> num = 5, total = 20
오른쪽으로 한칸 이동 : [3,4,5,6,7] -> num = 5, total = 25
결론:
오른쪽으로 한칸씩 이동할때마다 모든 숫자가 1씩 늘어나서.. total += num 이 된다..
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int sum=0;
int index =1;
for(int i=1; i<=num; i++) {
sum += i;
}
while(sum != total) {
if(sum < total) {
index++;
sum += num;
} else if(sum > total) {
index--;
sum -= num;
}
}
for(int i=0; i<num;i++) {
answer[i] = index++;
}
return answer;
}
}
반복문을 많이 사용한것같아서 다른 풀이도 공부한다.
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int check = num*(num+1) / 2;
int start = (total - check) / num + 1;
for (int i = 0; i < answer.length; i++) {
answer[i] = start + i ;
}
return answer;
}
}