풀이 개념
두 번째 수를 선정할 때, 첫 번째 수보다 큰 값이 들어간다면 길이가 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문을 통해 순회하며 체크한다.(브루트 포스)
풀이
- 첫 번째 수를 n 변수에 입력받는다.
- 최대 길이를 가진 수들을 저장할 my_list를 선언한다.
- for문을 통해 두 번째 수를 모두 검사한다.(두 번째 수 = i)
- 첫 번째, 두 번째 수가 정해졌을 때 조건을 만족하는 수들을 저장할 my_list를 선언한다.
- while문을 통해 세 번째 수부터 my_list에 저장한다.(종료조건 : 다음 수가 음수일 때)
- my_list를 다 만들면 max_list의 길이와 비교하고, 더 길면 max_list로 저장한다.
- 출력
코드
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=' ')
참고자료
없음
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[백준 2628 Python] 종이자르기 (0) | 2021.08.01 |
---|---|
[백준 1244 Python] 스위치 켜고 끄기 (0) | 2021.07.25 |
[백준 2669 Python] 직사각형 네개의 합집합의 면적 구하기 (0) | 2021.07.25 |
[백준 1904 JAVA] 01타일 (0) | 2021.03.27 |
[백준 9184 JAVA] 신나는 함수 실행 (0) | 2021.03.26 |