Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 외적
- 이진 탐색
- Python
- CCW알고리즘
- 비트마스킹
- 너비우선탐색
- 위상정렬
- Bitmasking
- 비트연산
- recursion
- binary search
- DP
- Algorithm
- BFS
- 소수
- 다익스트라
- 에라토스테네스
- 큐
- CCW 알고리즘
- Two Pointers
- ccw
- 재귀
- deque
- 알고리즘
- 딕셔너리
- dijkstra algorithm
- 에라토스테네스의 체
- 투 포인터
- BOJ
Archives
- Today
- Total
꾸꾸리
[BOJ/Python] 1351_무한 수열 본문
728x90
문제 출처:https://www.acmicpc.net/problem/1351
1351번: 무한 수열
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
www.acmicpc.net
문제
무한 수열 A는 다음과 같다.
- A0 = 1
- Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1)
N, P와 Q가 주어질 때, AN을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
출력
첫째 줄에 AN을 출력한다.
제한
- 0 ≤ N ≤ 10^12
- 2 ≤ P, Q ≤ 10^9
예제 입력 1
7 2 3
예제 출력 1
7
예제 입력 2
0 2 3
예제 출력 2
1
예제 입력 3
10000000 3 3
예제 출력 3
32768
예제 입력 4
256 2 4
예제 출력 4
89
예제 입력 5
1 1000000 1000000
예제 출력 5
2
힌트
⌊x⌋는 x를 넘지 않는 가장 큰 정수이다.
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import sys
n,p,q = map(int,sys.stdin.readline().split())
n_dict = {0:1}
def find(num):
if num not in n_dict:
n_dict[num] = find(num//p) + find(num//q)
return n_dict[num]
print(find(n))
|
cs |
- 딕셔너리 자료형을 이용한다. A0 = 1이므로, n_dict[0] = 1인 딕셔너리를 생성한다.
- 함수 find의 경우, 만약 찾는 값이 n_dict에 존재한다면 그 값을 반환한다.
- 존재하지 않는다면, 재귀를 이용하여 값을 찾아 그 값을 반환한다.
- 만약 딕셔너리를 이용하지 않고, 리스트를 이용한다면 n의 범위가 최대 10^12까지이므로, 리스트의 크기가 최대 10^12까지 생성되므로 적합하지 않다.
- num//p의 경우 num을 p로 나눈 몫을 반환하는데, ⌊x⌋는 x를 넘지 않는 가장 큰 정수이므로 같은 값을 가진다.
728x90
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/Python] 5430_AC (0) | 2023.01.12 |
---|---|
[BOJ/Python] 20055_컨베이어 벨트 위의 로봇 (0) | 2023.01.12 |
[BOJ/Python] 14719_빗물 (0) | 2023.01.10 |
[BOJ/Python] 15686_치킨 배달 (1) | 2023.01.09 |
[BOJ/Python] 1759_암호 만들기 (0) | 2023.01.08 |