몽상실현개발주의

[BOJ] 2331 / 반복수열 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 2331 / 반복수열 / Python 파이썬

migrationArc 2021. 6. 7. 09:19

[BOJ] 2331 / 반복수열 / Python 파이썬

[BOJ] 2331 / 반복수열 / Python 파이썬

https://www.acmicpc.net/problem/2331

 

2331번: 반복수열

첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.

www.acmicpc.net

 

풀이

제시되는 규칙으로 수열을 만들고, 반복되지 않는 수의 개수를 출력하는 문제이다.

 

각 수의 자리수인 0~9 까지의 수를 거듭제곱한 합으로 수열이 형성되므로, 수열은 반복되는 구간이 만들어진다.

 

이를 이용하여 수의 중복을 확인하고 중복 이전까지의 수열의 길이를 세어주었다.

 

A, P = map(int, input().split())

nums = [A]
while True:
    tmp = 0
    for s in str(nums[-1]):
        tmp += int(s) ** P

    if tmp in nums:
        break

    nums.append(tmp)

print(nums.index(tmp))

 

※ 반복 구간이 만들어지는 규칙에 대해 너무 복잡하게 생각하여 문제 난이도에 비해 어렵게 접근 하였다.

Comments