[Java] 프로그래머스 연속된 수의 합
문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예

입출력 예 설명
입출력 예 #1
- num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.
입출력 예 #2
- num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.
입출력 예 #3
- 4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.
입출력 예 #4
- 설명 생략
코드 설명
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int nsum = num * (1 + num) / 2;
int start = (total - nsum) / num;
for (int i = 1; i <= num; i++) {
answer[i - 1] = i + start;
}
return answer;
}
// public static void main(String[] args) {// Scanner 방식
// Solution T = new Solution();
// Scanner sc = new Scanner(System.in);
// int num = sc.nextInt();
// int total = sc.nextInt();
// for (int x : T.solution(num, total)) {
// System.out.print(x + " ");
// }
// sc.close();
// }
public static void main(String[] args) throws IOException {// BufferedReader 방식
Solution T = new Solution();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int num = Integer.parseInt(st.nextToken());
int total = Integer.parseInt(st.nextToken());
for (int x : T.solution(num, total)) {
System.out.print(x + " ");
}
br.close();
}
}
ex) num = 3 total = 12, num = 5 total = 15 일 경우
나는 이러한 방식으로 x를 구하여 연속된 수의 합을 구하기로 하였다.
(x + 1) (x + 2) (x + 3) = 12, (x + 1) (x + 2) (x + 3) (x + 4) (x + 5) = 15
int nsum = num * (1 + num) / 2; nsum 은 밑에 과정의 x를 구하는 과정.
(x + 6 = 12)x를 구하기 위하여 3 * (1 + 3) / 2, x = 6, (x + 0 = 15)x를 구하기 위하여 5 * (1 + 5) / 2, x = 15
int start = (total - nsum) / num; start는 밑에 과정의 x를 구하는 과정.
(12 - 6) / 3 = 2 (x + 1) (x + 2) (x + 3) = 12 x = 2
(15 - 15) / 5 = 0 (x + 1) (x + 2) (x + 3) (x + 4) (x + 5) = 15 x = 0
for (int i = 1; i <= num; i++) {
answer[i - 1] = i + start;
}
answer[0] ~ [2] = 1 + 2, 2 + 2, 3 + 2 = 3, 4, 5
answer[0] ~ [4] = 1 + 0, 2 + 0, 3 + 0, 4 + 0, 5 + 0 = 1, 2, 3, 4, 5