728x90
문제
무한 수열 A는 다음과 같다.
- A0 = 1
- Ai = A⌊i/P⌋ + A⌊i/Q⌋ (i ≥ 1)
N, P와 Q가 주어질 때, AN을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 3개의 정수 N, P, Q가 주어진다.
출력
첫째 줄에 AN을 출력한다.
해결 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
private static Map<Long,Long> aMap = new HashMap<>(); //DP 테이블
private static long N;
private static int P,Q;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Long.parseLong(st.nextToken());
P = Integer.parseInt(st.nextToken());
Q = Integer.parseInt(st.nextToken());
//A0값 대입
aMap.put(0L,1L);
System.out.println(getASequence(N));
}
//Ai = Ai/P + Ai/Q를 구하는 메소드
public static long getASequence(long i){
//Ai값이 이미 있으면 바로 값 출력
if(aMap.get(i) != null){
return aMap.get(i);
}
//Ai/P 연산
Long aip = aMap.get(i/P);
if(aip == null){
aip = getASequence(i/P);
}
//Ai/Q 연산
Long aiq = aMap.get(i/Q);
if(aiq == null){
aiq = getASequence(i/Q);
}
aMap.put(i,aip+aiq);
return aMap.get(i);
}
}
실행 결과
팁
- DP 테이블을 만들 때 크기가 어렵다면 Map을 이용해 만들자
- 입력값이 long인지 int인지 확인하자
'알고리즘 문제 풀이 > 해결코드' 카테고리의 다른 글
[백준 - 16197][GOLD 4][해설 X] - 두 동전 (JAVA) (0) | 2024.08.14 |
---|---|
[백준 - 17069][GOLD 4][해설 X] - 파이프 옮기기 2 (JAVA) (3) | 2024.07.24 |
[백준 - 5966][GOLD 5][해설 X] - Heat Wave (JAVA) (0) | 2024.07.10 |
[백준 - 21939][GOLD 4][해설 X] - 문제 추천 시스템 Version 1 (JAVA) (0) | 2024.07.09 |
[백준 - 17203][SILVER 4][해설 X] - ∑|ΔEasyMAX| (JAVA) (0) | 2024.07.07 |