[백준] 2331번. 반복수열

hagnoykmik·2023년 10월 6일
0

코딩테스트 연습

목록 보기
5/36
post-thumbnail

아이디어

  • 입력값 A부터 글자수대로 쪼개서(list) P번 반복한다음 다 더해준다.
  • 그리고 반복되는 부분 이 생기면 그거 빼고 남는 수 len 출력 -> 그 숫자의 index를 구하면됨

시간복잡도

코드

  1. map 이용
from collections import deque
import sys
imput = sys.stdin.readline

a, p = map(int, input().split())
sequence = []

q = deque([(a)])

while q:
    num = q.popleft()

    # 중복되면 중단
    if num in sequence:
        print(sequence.index(num))
        break
    
    # 숫자 쪼개서 리스트에 담기
    split_num = list(map(int, str(num)))

    # P번 곱한 수
    next_num = list(map(lambda x: x ** p, split_num))
    q.append(sum(next_num))
    sequence.append(num)
  1. for문 이용
from collections import deque
import sys
imput = sys.stdin.readline

a, p = map(int, input().split())
sequence = []

q = deque([(a)])

while q:
    num = q.popleft()
    next_num = 0

    # 중복되면 중단
    if num in sequence:
        print(sequence.index(num))
        break
    
    # 숫자 쪼개서 리스트에 담기
    for n in str(num):
        next_num += int(n) ** p

    q.append(next_num)
    sequence.append(num)
profile
성장하는 개발자, 김경아입니다.

0개의 댓글