코테 Lv0 - 연속된 수의 합
문제 설명
연속된 세 개의 정수를 더해 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]
제출코드
- 합계(sum)와 total이 일치할때까지 반복하는 while문을 작성하였습니다.
- total 값부터 감소하는 숫자 num개를 가진 Array를 만들어 합계를 sum에 저장합니다.
- total이 0인 경우는 음수, 정수가 같은 개수를 가지도록 n을 2로 나누어 Array를 생성하고 합계를 sum에 저장하였습니다.
- 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