알고리즘

BOJ 1351: 무한 수열

minbear 2023. 7. 13. 16:13

#BOJ 1351: 무한 수열

 

1351번: 무한 수열

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

www.acmicpc.net

#풀이

이 문제는 피보나치 수열과 비슷한 문제이다.

 

ans = func(n) = func(n/q) + func(n/p) ... 형태로 함수를 만들어 사용하면 해결할 수 있다.

 

그냥 처음에는 재귀함수를 생각못하고 모든 숫자를 배열에 저장하면서 풀었다가 메모리초과가 떠서

#include<iostream>
#include<unordered_map>
using namespace std;
typedef long long ll;
ll n;
int p, q;
 unordered_map<ll, ll> v;

 ll func(ll x) {
	 if (x == 0)
		 return 1;
	 if (v[x]) return v[x];

	 v[x] = func(x / p) + func(x / q);
	 return v[x];
 }
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> p >> q;
	
	cout << func(n) << '\n';
	return 0;
}

힘들었다...

 

다시 복습을 해야할 것 같다...

 

#코드