ps:problems:boj:1351
                무한 수열
| ps | |
|---|---|
| 링크 | acmicpc.net/… | 
| 출처 | BOJ | 
| 문제 번호 | 1351 | 
| 문제명 | 무한 수열 | 
| 레벨 | 골드 5 | 
| 분류 | 
 기초  | 
	
| 시간복잡도 | O(n^K) (K = log2 / log(min(p,q))) | 
| 인풋사이즈 | n<=10^19, p<=10^9, q<=10^9 | 
| 사용한 언어 | Python | 
| 제출기록 | 32416KB / 100ms | 
| 최고기록 | 56ms | 
| 해결날짜 | 2022/06/07 | 
| 태그 | |
풀이
- 점화식이 주어진 상태에서 구현만 하면 된다. 바텀업으로 바꿔서 처리하기는 복잡하고 비효율적이고, 그냥 저대로 재귀함수를 만들고 memoization을 추가해주면 된다.
 - 시간복잡도 계산은 좀 어려운데.. 대충 x=min(p,q)를 x라 하고 T(n)=2*T(n/x)+c 라고 하면.. 마스터정리를 적용해서 $ O(n^{log_x{2}}) $ 처럼 구할수 있을거 같다.
 
코드
"""Solution code for "BOJ 1351. 무한 수열".
- Problem link: https://www.acmicpc.net/problem/1351
- Solution link: http://www.teferi.net/ps/problems/boj/1351
"""
import functools
@functools.cache
def calc(n, p, q):
    if n == 0:
        return 1
    return calc(n // p, p, q) + calc(n // q, p, q)
def main():
    N, P, Q = [int(x) for x in input().split()]
    print(calc(N, P, Q))
if __name__ == '__main__':
    main()
ps/problems/boj/1351.txt · 마지막으로 수정됨: 2022/07/05 06:50 저자 teferi
                
                
토론