백준 1024 수열의 합
단순 구현 문제입니다.
https://www.acmicpc.net/problem/1024
아이디어는 다음과 같습니다.
- 길이가 최소 l 인경우 연속된 숫자의 합이므로 l로 나누고 l만큼 추가로 빼줍니다. (불안하면 좀 더 빼도됩니다)
- 1번으로 결정한 스타트를 l만큼 더해가며 리스트를 만듭니다 ex) start =3, l = 2 -> 3,4,
- 리스트의 값이 n이라면 정답
- 리스트의 값이 n을 넘어간다면 l을 증가시킵니다.
- 리스트의 값이 n보다 작다면 start를 증가시킵니다.
n, l = map( int, input().split())
length = l
check = False
while ( True):
if( check ):
break
#print(n , l)
start = (n//l) - l
while(True):
answer_list = []
#print(n, l ,start)
for i in range(l):
tmp = start + i
if ( tmp < 0 ):
continue
answer_list.append(tmp)
if ( sum (answer_list) == n):
check = True
break
elif ( sum(answer_list) > n):
break
else:
start+=1
if ( len(answer_list) > 100 or len(answer_list) < 0 or n+10 < l):
answer_list = []
answer_list.append(-1)
break
elif( n == 1 and l == 2):
answer_list= [0,1]
break
else:
l+=1
for i in answer_list:
if ( length > len(answer_list)):
print(-1)
break
print(i, end=' ')
틀린이유 : 조건 값이 음이 아닌 "정수"이다. 즉 0 이 포함되어도 됐었다. 예를 들어 1는 1 뿐만이 아니라 0, 1 도 가능하다. 이 조건을 무시하여서 계속 틀렸다.
Author And Source
이 문제에 관하여(백준 1024 수열의 합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tngus3722/백준-1024-수열의-합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)