티스토리 뷰
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)) 된다. 그리고 각각의 변수를 대입해서 구하면된다.
등차수열의 합만 안다면, 쉽게 풀 수 있다!
'알고리즘 > BaekJoon 알고리즘' 카테고리의 다른 글
[백준알고리즘] Q1977 완전재곱수 (0) | 2018.11.13 |
---|---|
[백준 알고리즘] Q10219 Meats on the grill (0) | 2018.11.10 |
[백준 알고리즘] Q1094 막대기 - Integer.bitCount(num) (0) | 2018.11.09 |
[백준 알고리즘] Q1547 공 (0) | 2018.11.08 |
[백준 알고리즘] Q2178 미로탐색 - BFS 너비탐색 알고리즘 (0) | 2018.11.08 |