[BOJ][Python]수 이어가기
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
: 앞의 두 수의 차- 0보다 작은 경우, while문을 마침
result
가case
의 길이(최대 개수) 보다 작다면,result
를len(case)
로 설정- 이 때,
result_list
도case[:]
로 설정
- 이 때,
- 출력 값에서 리스트가 아닌 숫자로 나타나야 하므로,
' '.join(map(str, result_list))
적용
📌후기
풀이를 쓰다보니 다른 풀이가 보이는 느낌...! while문 안에서 인덱스를 저렇게 설정 안하고 -2, -1로 했어도 가능했을 것 같다! 실패 횟수가 꽤 있었지만, 우여곡절 끝에 성공!
Author And Source
이 문제에 관하여([BOJ][Python]수 이어가기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mein-figur/BOJPython수-이어가기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)