백준 1024 수열의 합

단순 구현 문제입니다.

https://www.acmicpc.net/problem/1024

아이디어는 다음과 같습니다.

  1. 길이가 최소 l 인경우 연속된 숫자의 합이므로 l로 나누고 l만큼 추가로 빼줍니다. (불안하면 좀 더 빼도됩니다)
  2. 1번으로 결정한 스타트를 l만큼 더해가며 리스트를 만듭니다 ex) start =3, l = 2 -> 3,4,
  3. 리스트의 값이 n이라면 정답
  4. 리스트의 값이 n을 넘어간다면 l을 증가시킵니다.
  5. 리스트의 값이 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 도 가능하다. 이 조건을 무시하여서 계속 틀렸다.

좋은 웹페이지 즐겨찾기