[백준/파이썬] 1024번 수열의 합 풀이

업데이트:



문제 정보


풀이

문제

정수 N을 길이 L 이상 100 이하인 연속된 정수 수열의 합으로 나타내는 문제입니다.

가능한 수열이 여러 개면 길이가 가장 짧은 것을 출력합니다.

코드

n,l=map(int,input().split())
while l <= 100:
    if l%2==0:
        a=n//l-l//2+1
        b=n//l+l//2
    else:
        a=n//l-l//2
        b=n//l+l//2
    if b*b+b+a-a*a==2*n:break
    l+=1
try:
    if a<0 or b<0 or b*b+b+a-a*a!=2*n:raise Exception
    print(*[i for i in range(a,b+1)])
except:print(-1)

설명

길이 lL부터 100까지 증가시키며 수열의 시작값 a, 끝값 b를 계산해 검사합니다.

a + (a+1) + ... + b = N 조건을 만족하면 즉시 출력하고, 끝까지 없으면 -1을 출력합니다.



댓글남기기