백준 1024번 - 수열의 합

윤여준·2022년 6월 19일
0

백준 풀이

목록 보기
23/35
post-thumbnail

문제

문제 링크 : https://www.acmicpc.net/problem/1024

풀이

공차가 1인 등차수열의 합 공식을 활용해서 풀었다.

첫째항을 j, 더하는 항의 개수를 i라고 하면 합은 i * (2 * j + i - 1) / 2이다. 이 합이 n이 되는 경우를 구하는 것이므로 앞의 식에 = n을 붙여서 j에 대한 방정식을 풀면 j = 0.5 * (2 * n / i - i + 1)이 나온다.

따라서 구하고자 하는 리스트는 j부터 i개의 수가 연속된 리스트이다. 단, 리스트에 음수가 들어갈 수 없으므로 음수가 들어가는 경우는 건너뛴다.

for문을 통해 i는 l~100까지 넣어주고 j 값을 구한 뒤에 j가 정수라면 result에 리스트를 넣는다. 다만, 리스트에 음수가 들어가면 안 되므로 음수가 들어간다면 result = -1을 해준다.

import sys
input = sys.stdin.readline

n,l = map(int,input().split())

result = -1

for i in range(l,101):
    j = 0.5*(2*n/i - i+1)
    if j.is_integer():
        result = [k for k in range(int(j),int(j+i))]
        if -1 in result:
            result = -1
            continue
        break
    

if result == -1:
    print(result)
else:
    for i in result:
        print(i,end=' ')
    print()
profile
Junior Backend Engineer

0개의 댓글