백준 1351 무한 수열

2021. 1. 25. 02:28Algorithm/문제풀이

www.acmicpc.net/problem/1351

 

1351번: 무한 수열

첫째 줄에 3개의 정수 N, P, Q가 주어진다.

www.acmicpc.net

이 문제는 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