문제
https://www.acmicpc.net/problem/1024
풀이(12분)
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());
ArrayList<Integer> list = new ArrayList<>();
int cnt = 0;
int sum = 0;
for(int i = 0 ; i < n; i++){
if(sum + i < n){
sum += i;
cnt++;
}
}
for(int i = l; i <= cnt+1; i++){
int minus = (i-1)*i/2;
if((n - minus) % i == 0){
for(int j = 0; j < i; j++){
list.add((n - minus)/i + j);
}
break;
}
}
if(list.size() == 0 || list.size() > 100){
System.out.println(-1);
return;
}
for(int x : list){
System.out.print(x + " ");
}
}
}
연속된 수열의 합을 생각하면(연속이기 때문에 등차수열이라고 생각하자.) 고등학교 시절에 풀어본 문제들을 모두 기억할 것이다.
예를 들어 연속된 세개의 수열의 합을 구하는 문제에서 a-d, a, a+d 라고 두어 수열의 합이 3a로 간단하게 정리되는 문제들이 있다.
하지만 여기선, 연속된 것에 대한 처리를 간단하게 하기 위해 a, a+d, a+2d ... 등으로 두어 문제를 풀었다.
길이가 최대 몇까지 될 수 있는지 먼저 구한 뒤에, l부터 최대 길이까지만 반복하여 구하는 방식이다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 1254번. 팰린드롬 만들기(JAVA) (0) | 2025.01.09 |
---|---|
[백준] 1058번. 친구(JAVA) (0) | 2025.01.09 |
[백준] 1051번. 숫자 정사각형(JAVA) (0) | 2025.01.07 |
[백준] 15649번. N과 M (1)(JAVA) (0) | 2025.01.04 |
[백준] 2606번. 바이러스(JAVA) (1) | 2025.01.03 |