이번 문제는 주어진 조건을 통해 구현하여 해결하였다.
- a와 p를 입력받는다.
- 반복 수열 전까지의 수를 저장하기 위한 cnt변수를 선언한다.
- 각 자리의 숫자를 p번 곱한 수들의 합을 저장할 arr 배열을 선언한다.
- arr 배열에 a를 넣어준다.
- while문에서 이전의 수를 가지고 새로운 수를 arr 배열에 넣을 때 사용할 인덱스 변수 i를 0으로 정의한다.
- while문을 종료조건 없이 돌린다.
-> arr[i]를 string으로 변경하여 str_a로 저장한다.
-> a를 0으로 갱신한다.
-> str_a의 길이만큼 j에 대한 for문을 돌린다.
-> a에 str_a의 각 자리에 p제곱을 하여 더해준다.
-> a가 arr에 이미 있다면 이는 반복된 수열이므로 cnt에 arr에서 a가 나오는 첫번째 인덱스를 저장하고 while문을 종료한다.
-> a가 arr에 없다면 a를 arr에 넣어준다.
-> 다음 수를 구하기 위해 i를 1 증가시킨다.
- cnt를 출력한다.
Code
a,p=map(int, input().split())
cnt=0
arr=[]
arr.append(a)
i=0
while 1:
str_a=str(arr[i])
a=0
for j in range(len(str_a)):
a+=int(str_a[j])**p
if a in arr:
cnt=arr.index(a)
break
arr.append(a)
i+=1
print(cnt)