-
[Python 3] BOJ - 1024 "수열의 합"BOJ 2020. 4. 8. 16:39
# 문제 링크 : https://www.acmicpc.net/problem/1024
1024번: 수열의 합
첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.
www.acmicpc.net
# 풀이 :
개인적으로 이 문제의 핵심은 연속성에 있다고 생각한다. 최적해의 시작이 0이상의 정수 t라고 하자. 이때 길이가 k라고 가정할 때, t + t + 1 + t + 2 + .... + t + k - 1 = n이므로 정리하면 t = (n / k) - (k / 2) + (1 / 2) 이다. 이 때, t는 0이상의 정수인 경우는 길이가 k고 t로 시작하는 수열이 존재한다
# 코드
import sys # n = 만들어야 하는 수 # l = 최소 길이 n, l = map(int, sys.stdin.readline().split()) temp = l start = 0 flag = False # temp가 100이하일 때 반복 while temp <= 100: start = ((n / temp) - (temp / 2) + (1 / 2)) # start가 0 이상의 정수일 떄 if str(start).endswith('0') and start >= 0: flag = True break # start가 0 이상의 정수가 아니면 길이를 늘려준다 temp += 1 # 각 경우에 대한 정답 출력 if not flag: print(-1) else: for i in range(temp): print(int(start) + i, end=' ')
'BOJ' 카테고리의 다른 글
[Python 3] BOJ - 1062 "가르침" (0) 2020.04.12 [Python 3] BOJ - 1016 "제곱 ㄴㄴ수" (0) 2020.04.09 [Python 3] BOJ - 1002 "터렛" (0) 2020.04.07 [Python 3] BOJ - 13907 "세금" (0) 2020.04.03 [Python 3] BOJ - 10026 "적록 색약" (0) 2020.04.02