알고리즘 문제풀이

수열의 합[백준 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;
}