https://www.acmicpc.net/problem/2635
num = int(input())
result = 0
result_list = []
#다음 숫자 number
for number in range(num+1):
case, idx = [], 0
case.append(num)
case.append(number)
while True:
calc = case[idx]-case[idx+1]
if calc < 0 :
break
case.append(calc)
idx += 1
#result보다 더 큰 값이 나오는 경우 값을 바꿈
if len(case) > result :
result = len(case)
result_list = case[:]
print(result)
#출력 조건을 맞추기 위해 리스트를 문자열로 변환
print(' '.join(map(str,result_list)))
인풋으로 주어진 수num
를 받고, 최대 개수가 들어가는 result
, 최대 개수일 때의 수들을 위한 리스트 result_list
를 생성한다.
num
다음에 오는 숫자 number
의 경우를 0부터 num
까지로 각각 나누어서 최대인 경우를 확인한다.
case
라는 새로운 리스트를 만들어 각각의 경우를 확인calc
: 앞의 두 수의 차result
가 case
의 길이(최대 개수) 보다 작다면, result
를 len(case)
로 설정result_list
도 case[:]
로 설정' '.join(map(str, result_list))
적용풀이를 쓰다보니 다른 풀이가 보이는 느낌...! while문 안에서 인덱스를 저렇게 설정 안하고 -2, -1로 했어도 가능했을 것 같다! 실패 횟수가 꽤 있었지만, 우여곡절 끝에 성공!