난이도
골드 V
풀이
처음 풀이에서는 메모이제이션으로 안 풀고 재귀만 돌려서 시간 초과가 났고,
두번째 풀이에서는 맵이 아닌 리스트를 활용해서 리스트에 N+1 크기만큼을 미리 만들어두어서 메모리 초과가 났다.
세번째 풀이에서는 리스트가 아닌 맵으로 풀었더니 통과했다
-> 탐색해보면 모든 수를 다 따지는 것이 아니다. 따라서 리스트 보다는 맵을 사용하는 것이 더 적절한 것 같다.
import sys
input=sys.stdin.readline
checkmap = {}
N,P,Q,X,Y=map(int,input().split())
def get(n):
if n<=0:
return 1
elif n in checkmap:
return checkmap[n]
else:
checkmap[n]=get(n//P-X)+get(n//Q-Y)
return checkmap[n]
print(get(N))
링크
https://www.acmicpc.net/problem/1354
1354번: 무한 수열 2
첫째 줄에 5개의 정수 N, P, Q, X, Y가 주어진다.
www.acmicpc.net
'알고리즘' 카테고리의 다른 글
BOJ 15787번(기차가 어둠을 헤치고 은하수를) (0) | 2023.04.05 |
---|---|
프로그래머스 추억 점수(Java/Python) (0) | 2023.04.05 |
BOJ 9742번 - 순열 (0) | 2023.04.04 |
BOJ 10610번(30) (0) | 2023.04.02 |
BOJ 13417번(카드 문자열) (0) | 2023.04.02 |