문제
입력으로 첫번째 수가 주어질 때 아래 규칙으로 만들어지는 최대 개수의 수들을 구하라.
- 첫 번째 수로 양의 정수가 주어진다.
- 두 번째 수는 양의 정수 중에서 하나를 선택한다.
- 세 번째부터 이후에 나오는 모든 수는 앞의 앞의 수에서 앞의 수를 빼서 만든다.
- 음의 정수가 만들어지면, 이 음의 정수를 버리고 더 이상 수를 만들지 않는다.
풀이
후보리스트에는 입력 수와 1부터 n까지의 수 중 랜덤으로 넣는다. 모든 수를 다 고려해야 하므로 for문으로 모든 케이스를 다 살필 것이다.
후보 리스트에 while문으로 위 규칙을 따라 수를 생성해 저장한다.
만약 final 리스트보다 후보리스트의 길이가 더 길다면 final 리스트를 이번 시도의 후보리스트로 교체한다.
두번째 수가 n인 시도까지 모두 끝났다면 이제 final 리스트에는 규칙을 따르는 최대 개수의 배열이 저장되어있다.
이제 그 길이와 모든 요소를 출력하면 된다.
코드
n=int(input())
final=[]
for i in range(1, n+1):
cand = [n, i]
while len(cand)>=2 and (cand[-2]-cand[-1])>=0:
cand.append(cand[-2]-cand[-1])
if len(final)<=len(cand): final=cand
print(len(final))
print(*final)
'BOJ > Python' 카테고리의 다른 글
[BOJ/백준] 6159 - Costume Party (Python) (0) | 2025.05.11 |
---|---|
[BOJ/백준] 3711 - 학번 (Python) (0) | 2025.05.09 |
[BOJ/백준] 2508 - 사탕 박사 고창영 (Python) (0) | 2025.05.09 |
[BOJ/백준] 2303 - 숫자 게임 (Python) (0) | 2025.05.09 |
[BOJ/백준] 2057 - 팩토리얼 분해 (Python) (1) | 2025.05.08 |