Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Python
- 출처:장기효vue.js
- greedy
- simulation
- algorithm
- DFS
- floyd washall
- 1012
- implementaion
- 백준
- javascript
- 코테
- programming
- Vue.js
Archives
- Today
- Total
DevDave
[Algorithm]백준1024<python>(sil2)Math 본문
수열의 합 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 128 MB | 17153 | 4119 | 3402 | 26.145% |
문제
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
<Code>
import sys
input = sys.stdin.readline
n,l = map(int,input().split())
i = l
while 1 :
if i > 100:
print(-1)
break
elif (n - i * (i - 1) / 2) >= 0:
if (n - i * (i - 1) // 2) % i == 0:
a = (n - i * (i - 1) // 2) // i
# print(a)
# print(i)
for k in range(i):
print(a, end=' ')
a += 1
break
i += 1
else:
print(-1)
break
<Insight>
- 최소길이를 초기화하고 길이를 증가 시켜가며 조건에 맞는 시작 값을 맞는 방식으로 구현
- 최소길이의 조건에 부합할때, 시작 원소를 필두로 필요한 길이 만큼 출력
- 최소길이가 100이 넘어가면 조건에 부합하지 못해 -1을 출력해야하는데 이를 놓치는 바람에 시간이 걸림
- 등차수열의 합
'Algorithm' 카테고리의 다른 글
[Algorithm] Floyd Warshall (0) | 2022.06.29 |
---|---|
[Algorithm]백준1535<python>(sil2) 0/1Knapsack with DP (0) | 2022.06.29 |
[Algorithm]백준1012<python>(sil2)DFS (0) | 2022.06.23 |
[Algorithm]백준15889<python>(sil3)Greedy (0) | 2022.06.22 |
[Algorithm]백준1448<python>(sil3)DP (0) | 2022.06.21 |