반응형

https://www.acmicpc.net/problem/1354

 

1354번: 무한 수열 2

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

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. unordered_map< ll, ll> um을 선언합니다.

 

2. 재귀함수를 통해 n이 0보다 작거나 같으면 1을 return하고, um.count(n)이 0일 때 um[ n ] = dfs(n / P) + dfs(n / Q)를 통해 um[ n ]을 구해줍니다.

 

3. dfs(N)을 출력합니다.

 

[ 소스코드 ]

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
#include<iostream>
#include<unordered_map>
#define ll long long
 
using namespace std;
 
ll N;
int P, Q, X, Y;
unordered_map<ll, ll> um;
 
ll dfs(ll n)
{
    if (n <= 0return um[n] = 1;
    if (um.count(n) != 0return um[n];
 
    return um[n] = dfs(n / P - X) + dfs(n / Q - Y);
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N >> P >> Q >> X >> Y;
 
    cout << dfs(N);
}
cs
반응형

+ Recent posts