푸는 아이디어는 들어가있는 최초의 배열의 값에서 각 자릿수의 값을 p 제곱을 해서 나오는 값을 계속 배열에 추가를 한다. 그러면 반복되는 것이 발생할 것이고 그 반복되는 값을 제외하는 것이 몇개냐는 문제이다. 여기서의 핵심은 제곱해서 나온 값이 기존 배열에 최초로 들어온 순간 그 index를 안다면, 그 앞까지는 반복되지 않는 다는 것이기 때문에 그 것을 구하면 된다.
a, b = map(int, input().split())
nums = [a] # 배열에 최초 값 넣어준다.
while True:
num = 0 # 자릿수의 p 제곱 값을 더한 값
for i in str(nums[-1]) # 맨 마지막에 들어온 값의 자릿수를 구할 것이기 때문에 str 처리
num += int(i) ** b
if num in nums:
break
else:
nums.append(num)
print(nums.index(num)) # num이 nums에 있을 때 break 했기 때문에 그 앞까지는 반복되지 않는 값이다.