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);
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 JadenCase 문자열 만들기 (JAVA) (0) | 2022.09.09 |
---|---|
프로그래머스 자릿수 더하기 (JAVA) (0) | 2022.09.08 |
프로그래머스 등산코스 정하기 (JAVA) (0) | 2022.09.06 |
프로그래머스 코딩 테스트 공부 (JAVA) (0) | 2022.09.05 |
프로그래머스 문자열 다루기 (JAVA) (0) | 2022.09.04 |