반응형
문제
다음과 같이 정의된 수열이 있다.
- D[1] = A
- D[n] = D[n-1]의 각 자리의 숫자를 P번 곱한 수들의 합
예를 들어 A=57, P=2일 때, 수열 D는 [57, 74(=52+72=25+49), 65, 61, 37, 58, 89, 145, 42, 20, 4, 16, 37, …]이 된다. 그 뒤에는 앞서 나온 수들(57부터가 아니라 58부터)이 반복된다.
이와 같은 수열을 계속 구하다 보면 언젠가 이와 같은 반복수열이 된다. 이때, 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 구하는 프로그램을 작성하시오. 위의 예에서는 [57, 74, 65, 61]의 네 개의 수가 남게 된다.
입력
첫째 줄에 A(1 ≤ A ≤ 9999), P(1 ≤ P ≤ 5)가 주어진다.
출력
첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다.
예제 입력57 2
|
예제 출력4
|
풀이
나온 수들의 번호를 순서대로 지정해 딕셔너리에 담는다.
이미 나왔던 수라면 번호를 추출해 1을 뺀 수를 출력한다.
a,p = input().split()
p = int(p)
d,cnt = dict(),1
d[a] = cnt
while True:
cnt += 1
hap = 0
for i in a:
hap += int(i)**p
a = str(hap)
if d.get(a):
print(d.get(a)-1)
break
d[a] = cnt
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[🥈4 / 백준 1244 / 파이썬] 스위치 켜고 끄기 (2) | 2022.01.10 |
---|---|
[🥉3 / 백준 15953 / 파이썬] 상금 헌터 (0) | 2022.01.06 |
[🥉2 / 백준 1076 / 파이썬] 저항 (0) | 2021.12.31 |
[🥇4 / 백준 14499 / 파이썬] 주사위 굴리기 (0) | 2021.12.29 |
[🥈4 / 백준 1543 / 파이썬] 문서 검색 (0) | 2021.12.26 |