
콜라즈 추측과 누적합을 할수있는지 물어보는 문제.
콜라즈 추측은 짝수면 2로나누고 홀수면 3을곱한뒤 1을 더하여 마지막에 1이 나올때까지 반복하는것이고 누적합은 정적분의 결과를 알기위해 필요하다.
a와 b가 실제 누적합의 범위보다 클수있으므로 그것을 예외처리해주는 방식이 필요하다.
코드
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
int K=k;
ArrayList<int[]> list =new ArrayList<>();
int count = 0;
while(true){
list.add(new int[]{count,k});
if(k%2==0) k=k/2;
else if(k==1){
break;
}else{
k=k*3+1;
}
count++;
}
double[] dp = new double[list.size()];
dp[0]=0;
for(int i=1;i<list.size();i++){
dp[i]= dp[i-1]+((double)list.get(i)[1]+list.get(i-1)[1])/(double)2.0;
}
double[] answer = new double[ranges.length];
int length= dp.length-1;
for(int i=0;i<ranges.length;i++){
if(length+ranges[i][1]<0||ranges[i][0]>length) answer[i]= -1;
else answer[i]=dp[length+ranges[i][1]]-dp[ranges[i][0]];
if(answer[i]<0) answer[i]= -1;
}
return answer;
}
}