CT/백준

[백준][JAVA] 수열의 합

hyunji1109 2024. 12. 23. 01:40

https://www.acmicpc.net/problem/1024

 

 

문제

N과 L이 주어질 때, 합이 N이면서, 길이가 적어도 L인 가장 짧은 연속된 음이 아닌 정수 리스트를 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.

 

출력

만약 리스트의 길이가 100보다 작거나 같으면, 연속된 수를 첫째 줄에 공백으로 구분하여 출력한다. 만약 길이가 100보다 크거나 그러한 수열이 없을 때는 -1을 출력한다.

 

 


 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt(); 
        int L = scanner.nextInt();

        for (int length = L; length <= 100; length++) {
            int temp = N - (length * (length - 1)) / 2;
            if (temp < 0) break; 

            if (temp % length == 0) { 
                int start = temp / length;
                if (start >= 0) { 
                    for (int i = 0; i < length; i++) {
                        System.out.print((start + i) + " ");
                    }
                    return; 
                }
            }
        }
        System.out.println("-1"); 
    }
}

 

 

풀이

 

  • 입력
    • N
      • 수열의 합 
    • L
      • 수열의 최소 길이
  • 수열
    • 길이 length를 L부터 시작해 최대 100까지 검사
    • temp = N - (length * (length - 1)) / 2로 시작 숫자 계산
    • 시작 숫자가 자연수(>= 0)이고, temp가 length로 나누어떨어지면 출력

 

  • 출력
    • 가능한 가장 짧은 수열을 출력하고 종료
    • 조건을 만족하는 수열이 없다면 -1 출력