알고리즘
백준 1351번 무한 수열 (JAVA)
박카스마시며코딩
2022. 9. 7. 17:54
https://www.acmicpc.net/problem/1351
1351번: 무한 수열
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
www.acmicpc.net
저는 DP를 이용하여 문제를 해결하였습니다.
n의 입력이 int를 넘기때문에 DP를 저는 Map을 이용해 표현했습니다.
Map에 있다면 계산하지 않고 그 값을 리턴하도록 하였습니다.
package BOJ.dp;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_1351 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Long> stoi = Long::parseLong;
long n = stoi.apply(st.nextToken());
long p = stoi.apply(st.nextToken());
long q = stoi.apply(st.nextToken());
// long[] dp = new long[n+1];
Map<Long,Long> dp = new HashMap<>();
long result = cal(n,p,q,dp);
System.out.println(result);
}
private static long cal(long n, long p, long q, Map<Long,Long> dp) {
if(n == 0){
return 1;
}
if(dp.containsKey(n)){
return dp.get(n);
}
dp.put(n,cal(n/p,p,q,dp) + cal(n/q,p,q,dp));
return dp.get(n);
}
}