첫 번째 시도 (실패)
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)
- 반복수열의 시작인덱스가 곧 반복되지 않는 값들의 개수이므로!
채점 결과
