백준 2331. 반복수열 - 문제풀이 (pop) (Python/파이썬)

3607 단어 pythonpython

🔎 2331번. 문제 보기
https://www.acmicpc.net/problem/2331


💡 문제 풀기 전
생각보다 구조가 간단하게 떠올랐다.
'규칙에 맞게 수를 추가해주면서, 중복되는 수가 나오면 바로 stop하고 계산해줘야겠다!'

📋 코드 보기

from sys import stdin

A, P = map(int, stdin.readline().split())
check = [A]

while True:
    new = 0
    for i in (str(check[-1])):
        new += int(i) ** P
    if new in check:
        while True:
            if new == check.pop():
                print(len(check))
                exit()
    else:
        check.append(new)

🥕 코드 풀이 및 관련 개념

규칙에 따라 수를 계산해줄 때마다 check라는 리스트에 새로운 수를 추가해준다.

for문은 새로운 수(new)를 계산해주는 구간

그 다음에 새로운 수(new)가 check라는 리스트 안에 있으면,
예를 들어 [ 1, 5, 3, 4 ] 그리고 그 다음에 추가하려고 했던 수가 5일 때
check 리스트 내에서 5까지 pop을 해준다.

그리고 남은 check 리스트의 길이를 출력해주면 된다.


좋은 웹페이지 즐겨찾기