알고리즘

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

개발자 박현준 2023. 1. 31. 19:44
728x90

문제 설명

연속된 세 개의 정수를 더해 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

728x90