- 피보나치값의 범위가 10의 21000 승이므로 단순한 자료형으로는 절대 풀 수 없다.
- 원래는 자릿수와 가장 큰 자리의 값을 키로 하려고 했지만, 뒤의 x 자리를 키로 하는게 더 계산하기가 편했다.
- 딕셔너리와 문자열 슬라이싱 등을 사용하는데 파이썬이 너무 좋은 것 같다.
- 다른 사람들 풀이를 보니 파이썬의 경우 굳이 20자리만 볼 것이 아니라 전체 값을 해도 되는 듯 하다.
- 물론 정수 자료형의 범위가 무한대이긴 해도 진짜 가능할 줄은 몰랐는데...
import sys
T = input()
fib = {}
fib[0] = bef2 = 0
fib[1] = bef1 = 1
for i in range(2, 100001):
val = str(bef2 + bef1)[-21:] # n 번째 피보나치의 마지막 20자리를 키로 해서
fib[val] = i # n 을 값으로 넣음
bef2 = bef1 # 다음 피보나치 업데이트
bef1 = int(val)
for line in sys.stdin:
print(fib[line.strip()[-21:]]) # 입력받은 피보나치값의 마지막 20자리로 n 을 구함
'PS > BOJ' 카테고리의 다른 글
[백준] 3273 : 두 수의 합 (0) | 2021.03.16 |
---|---|
[백준] 3055 : 탈출 (0) | 2021.03.14 |
[백준] 2841 : 외계인의 기타 연주 (0) | 2021.02.10 |
[백준] 14496 : 그대, 그머가 되어 (0) | 2021.01.27 |
[백준] 1406 : 에디터 (0) | 2021.01.23 |