728x90
반응형
https://www.acmicpc.net/problem/1024
1024번: 수열의 합
첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
www.acmicpc.net
문제
N과 L이 주어질 때, 합이 N이면서, 길이가 적어도 L인 가장 짧은 연속된 음이 아닌 정수 리스트를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
출력
만약 리스트의 길이가 100보다 작거나 같으면, 연속된 수를 첫째 줄에 공백으로 구분하여 출력한다. 만약 길이가 100보다 크거나 그러한 수열이 없을 때는 -1을 출력한다.
예제 입력 1
18 2
예제 출력 1
5 6 7
예제 입력 2
18 4
예제 출력 2
3 4 5 6
예제 입력 3
18 5
예제 출력 3
-1
예제 입력 4
45 10
예제 출력 4
0 1 2 3 4 5 6 7 8 9
예제 입력 5
1000000000 2
예제 출력 5
199999998 199999999 200000000 200000001 200000002
풀이
설명
- 본 문제를 풀기 위해서는 등차수열의 합인 sum(1...N) = N(N+1)/2를 알고 있으면 쉽게 풀 수 있다.
코드
# 수열의 합 공식
# N = (x+1) + (x+2) + ... + (x+L)
# N = L*X + (1+2+3+...L)
# N = L*X + L(L+1)/2
# L*X = N - L(L+1)/2
N, L = map(int, input().split())
for i in range(L, 101) :
x = N - i*(i+1)//2
if x % i == 0 :
x = int(x//i)
if x+1 >= 0 :
print(*(i for i in range(x+1, x+i+1)))
break
else :
print(-1)
728x90
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm] 백준 1920번 수 찾기 (Python) (0) | 2023.02.26 |
---|---|
[Algorithm] 백준 2501번 약수 구하기 (Python) (0) | 2023.02.26 |
[Algorithm] 백준 1182번 부분수열의 합 (Python) (0) | 2023.02.23 |
[Algorithm] 백준 9020번 골드바흐의 추측 (Python) (0) | 2023.02.22 |
[Algorithm] 백준 10819번 차이를 최대로 (Python) (0) | 2023.02.21 |