알고리즘/백준

1024.수열의 합

1.5볼트 2023. 2. 26. 01:52
728x90

문제

N과 L이 주어질 때, 합이 N이면서, 길이가 적어도 L인 가장 짧은 연속된 음이 아닌 정수 리스트를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.

출력

만약 리스트의 길이가 100보다 작거나 같으면, 연속된 수를 첫째 줄에 공백으로 구분하여 출력한다. 만약 길이가 100보다 크거나 그러한 수열이 없을 때는 -1을 출력한다.

N과 L 이 주어지면 연속되는 숫자 L 개 이상의 합이 N이되는 경우
제목이 수열이 합인 거부터 수열의 합 공식을 사용하면 풀 수 있다는 느낌
a+(n-1) d에서 연속적인 수열이라 d=1이고

수열의 합

이고 수열의 시작값 a로 정리하면

이다.

여기서 정상적인 수열이 되려면 a가 정수여야 하기때문에

위 두개의 값이 정수인 조건

그리고 음수는 포함하지 않기 때문에

인 조건을 만족하는 n값을 L부터시작해 찾으면 된다

def f(x,n):
    while n<101:
        if x%n==0 and (x//n-n+1)%2==0 and x//n+1>=n:
            l=(x//n-n+1)//2
            return(range(l,l+n))
        n+=1
    return(-1,)
x,n=map(int,input().split())
print(*f(x*2,n))