[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문을 마침
  • resultcase의 길이(최대 개수) 보다 작다면, resultlen(case)로 설정
    • 이 때, result_listcase[:]로 설정
  • 출력 값에서 리스트가 아닌 숫자로 나타나야 하므로, ' '.join(map(str, result_list)) 적용

📌후기


풀이를 쓰다보니 다른 풀이가 보이는 느낌...! while문 안에서 인덱스를 저렇게 설정 안하고 -2, -1로 했어도 가능했을 것 같다! 실패 횟수가 꽤 있었지만, 우여곡절 끝에 성공!

좋은 웹페이지 즐겨찾기