백준 1351 무한 수열
2021. 1. 25. 02:28ㆍAlgorithm/문제풀이
이 문제는 dp유형이다. dp 배열을 map으로 만들어주어서 문제를 해결할 수 있었다.
왜 map을 사용했을까? 우선 입력값을 보면 10^12로 매우 크다 이를 배열로 표현하기에는 크게 무리가 있다고 생각했다. 그래서 나는 이 숫자들을 문자열로 만들어서 map의 키 값으로 지정하여 value를 저장하는 캐시를 만들어 주어 쉽게 해결할 수 있었다. 그 나머지는 조건 그대로 재귀를 구성해주면 된다.
더보기
#include <cstdio>
#include <map>
#include <string>
using namespace std;
#define ll long long
map<string, ll> mp;
ll getNum(ll num);
ll N, P, Q;
int main(){
scanf("%lld %lld %lld", &N, &P, &Q);
printf("%lld", getNum(N));
}
ll getNum(ll num){
if(num == 0)
return 1;
if(mp.find(to_string(num)) != mp.end()){
return mp[to_string(num)];
}
return mp[to_string(num)] = getNum(num/P) + getNum(num/Q);
}
'Algorithm > 문제풀이' 카테고리의 다른 글
백준 1937 욕심쟁이 판다 (0) | 2021.01.28 |
---|---|
백준 1005 AMC Craft (0) | 2021.01.28 |
백준 1695 팰린드롬 만들기 (0) | 2021.01.25 |
백준 1707 이분 그래프 (0) | 2021.01.25 |
백준 2688 줄어들지 않아 (0) | 2021.01.22 |