본문 바로가기
Problem Solving/BOJ

[BOJ][Python]2331번 풀이

by NoiB 2022. 7. 1.
반응형

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

 

2331번: 반복수열

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

www.acmicpc.net

a,p = input().split()
n = [a]
num = {i:0 for i in range(1,236197)}
num[int(a)] = 1
tmp = 0
while 1:
    c = n[-1]
    for i in c:
        tmp += int(i)**int(p)
    n.append(str(tmp))
    if num[tmp] == 1:
        print(len(n[:n.index(str(tmp))]))
        break
    else:
        num[tmp] += 1
        tmp = 0
    
#236,196 : max

확실히 구현은 많이 풀고 시간 투자를 많이 해야 느는 것 같습니다. 글을 작성하는 동안에도 어디를 어떻게 고치면 되겠다 싶은게 계속 생각이 나네요.

 

해당 풀이는 뭐만하면 dp로 생각하는 저의 습관때문인지 딕셔너리로 깔끔하게 풀 수 있음에도 마치 dp를 풀듯이 풀어버린 비효율적인 풀이입니다. 기껏 키와 값을 저장할 수 있는 특성이 있는데도 그걸 하나도 제대로 활용하질 못했네요. 일단 접근 자체는 딕셔너리에 최대한으로 나올 수 있는 값인 236196까지 미리 밸류를 0으로 해서 생성해놓고 나올 때 마다 값을 1로 바꾼다음에 나중에 한 번 더 나오면 리스트 슬라이싱을 해서 길이를 체크하는 방식으로 했는데 그럴 필요 없이 똑같은게 나올때까지 밸류를 하나씩 늘려가다가 똑같은게 나오면 반복문을 멈추고 그 전에 저장된 밸류를 출력하면 훨씬 경제적으로 코드를 작성할 수 있습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]5338, 25083번 풀이  (0) 2022.07.03
[BOJ][Python]2178번 풀이  (0) 2022.07.02
[BOJ][Python]1992번 풀이  (0) 2022.07.01
[BOJ][Python]14720번 풀이  (0) 2022.06.30