알고리즘 문제풀이
수열의 합[백준 1024]
wiojfe
2024. 5. 19. 18:09
https://www.acmicpc.net/problem/1024
수열 합 공식으로 조건에 부합하는 수열을 찾아본다.
#include <stdio.h>
#include <stdlib.h> // abs() 함수 사용을 위해 추가
int main() {
int N, L;
scanf("%d %d", &N, &L);
int result[101]; // 최대 100개의 연속된 숫자를 저장할 수 있는 배열
int temp = 0;
int length = 0; // 실제 결과 배열의 길이
while(1) {
int start = (2*N - L*L + L) / (2*L); // 등차수열의 합 공식을 사용하여 첫 항 계산
int end = start + L - 1;
if (start < 0) { // 음수가 나올 경우 0부터 카운트
int adjust = abs(start);
start += adjust;
end += adjust;
}
temp = 0; // temp 초기화
length = 0; // 결과 배열의 길이 초기화
for (int i = start; i <= end; i++) {
result[length++] = i;
temp += i;
}
if(temp == N) {
break;
} else {
L += 1;
if (L > 100) {
printf("-1");
return 0;
}
}
}
for (int k = 0; k < length; k++) {
printf("%d ", result[k]);
}
return 0;
}