[ BOJ / Python ] 2331번 반복수열

황승환·2021년 11월 27일
0

Python

목록 보기
35/498

이번 문제는 주어진 조건을 통해 구현하여 해결하였다.

  • 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)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글