무한 수열 A는 다음과 같다.
- A0 = 1
- Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1)
N, P와 Q가 주어질 때, AN을 구하는 프로그램을 작성하시오.
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
첫째 줄에 AN을 출력한다.
예제 입력1
7 2 3
예제 출력1
7
0 2 3
예제 출력2
1
10000000 3 3
예제 출력3
32768
256 2 4
예제 출력4
89
1 1000000 1000000
예제 출력5
2
이 문제는 AN을 구하기 위해 AN/P 와 AN/Q값을 계속해서 참조해야하는 문제이다.
1. 재귀 함수 활용
solution(n) 생성2. 해시맵(HashMap) 활용
import java.io.*;
import java.util.*;
public class Main {
static long n;
static long p;
static long q;
static HashMap<Long,Long> map = new HashMap<>();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
n = Long.parseLong(input[0]);
p = Long.parseLong(input[1]);
q = Long.parseLong(input[2]);
map.put(0L, 1L);
System.out.println(solution(n));
}
static long solution(long n) {
if (!map.containsKey(n)) {
map.put(n,solution(n / p) + solution(n / q));
}
return map.get(n);
}
}
