풀이 개념

두 번째 수를 선정할 때, 첫 번째 수보다 큰 값이 들어간다면 길이가 2보다 커질 수 없다.

list[0] = n
list[1] = n + α
# list[2] = -α

len(list) = 2

그러나, 두 번째 수가 첫 번째 수와 같다면 리스트 길이는 4이 된다.

list[0] = n
list[1] = n
list[2] = 0
list[3] = n
# list[4] = -n

len(list) = 4

따라서 최대 개수의 수들을 구할 때, 두 번째 수는 첫 번째 수보다 작거나 같은 수들만 체크하면 된다.

가능한 모든 두 번째 수를 for문을 통해 순회하며 체크한다.(브루트 포스)

풀이

  1. 첫 번째 수를 n 변수에 입력받는다.
  2. 최대 길이를 가진 수들을 저장할 my_list를 선언한다.
  3. for문을 통해 두 번째 수를 모두 검사한다.(두 번째 수 = i)
  4. 첫 번째, 두 번째 수가 정해졌을 때 조건을 만족하는 수들을 저장할 my_list를 선언한다.
  5. while문을 통해 세 번째 수부터 my_list에 저장한다.(종료조건 : 다음 수가 음수일 때)
  6. my_list를 다 만들면 max_list의 길이와 비교하고, 더 길면 max_list로 저장한다.
  7. 출력

코드

n = int(input())

max_list = []
for i in range(1, n + 1):
    my_list = [n]
    my_list.append(i)

    idx = 1
    while True:
        next_num = my_list[idx - 1] - my_list[idx]
        if next_num < 0:
            break
        my_list.append(next_num)
        idx += 1

    if len(max_list) < len(my_list):
        max_list = my_list

print(len(max_list))
for i in max_list:
    print(i, end=' ')

참고자료

없음

+ Recent posts