티스토리 뷰


1. Java 구현

            
package Q1024;

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int L = Integer.parseInt(input[1]);
        boolean flag = true;
        for (int i = L; i <= 100 && flag; i++) {
            if((2 * N >= i * (i - 1)) && (2 * N - i * (i - 1)) % (2 * i) == 0) {
                int a = ((2 * N - i * (i - 1)) / (2 * i));
                for (int j = 0; j < i; j++) {
                    bw.write((a + j) + " ");
                }
                bw.write("\n");
                flag = false;
            }
        }

        if(flag) bw.write("-1 \n");
        bw.close();
    }
}


2. 코드설명

 문제 그대로 수열의 합을 구하는 것이다. 수열은 1씩 순처적으로 증가하는 등차수열이다. 등차수열의 합을 구하는 공식을 이용한다면 쉽게 구현이 가능하다.

 "S = (a + a + (n - 1) * d) * n / 2" 공식을 이용하면 된다. 여기서 a는 첫번째 항, n은 항의 갯수, d는 등차이다.

 이 공식에서 우리가 알지 못하는 변수는 3개 이다. d는 순차적으로 증가하기 때문에 1이고, n은 L를 반복문을 통해서 1씩 증가할 예정이다.

 그럼 우리가 모르는 것은 첫번째 항인 a이다. a는 1차 방정식이 되기 때문에 ((2 * N - i * (i - 1)) / (2 * i)) 된다.  그리고 각각의 변수를 대입해서 구하면된다.

 등차수열의 합만 안다면, 쉽게 풀 수 있다!



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함