[백준] 2331 반복수열 (python)

고쥐·2024년 7월 31일

첫 번째 시도 (실패)

a, p = map(int, input().split())
result_arr = []  # 결과 반환하기 위한 배열

def makeNum(v):
    if v in result_arr:
        return
    result_arr.append(v)
    next_value = sum(int(digit) ** p for digit in str(v))
    makeNum(next_value)

makeNum(a)

print(len(result_arr))
  • 문제 중 '반복되는 부분을 제외했을 때' 라는 문장을 잘못 이해하여 위와 같은 코드 작성 (중복되는 수가 발생하는 지점부터 멈추도록 하였으나, 문제에서는 중복되는 반복수열을 모두 제거하고 그 외 나머지 개수를 count 하는 것이었음!)

두 번째 시도 (성공)

a, p = map(int, input().split())
result_arr = []  # 결과 반환하기 위한 배열


def makeNum(v):
    if v in result_arr:
        return result_arr.index(v)  # 이미 있는 값일 때, 이 전에 저장해두었던 그 값의 인덱스를 찾아 반환하기 (반복수열의 시작인덱스)
    result_arr.append(v)
    next_value = sum(int(digit) ** p for digit in str(v))
    return makeNum(next_value)

arr_length = makeNum(a)  # 반복 수열을 제외한 갯수 

print(arr_length)
  • 반복수열의 시작인덱스가 곧 반복되지 않는 값들의 개수이므로!

채점 결과

profile
미래의 고쥐를 위한 아하모먼트 기록 🥔

0개의 댓글