Contents
내가 작성한 코드

내가 작성한 코드
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
double[] answer = new double[ranges.length];
List<Integer> list = new ArrayList<>(); // 우박수열
// 우박수열 리스트 채우기
list.add(k);
while (k != 1) {
if (k % 2 == 0) {
k /= 2;
list.add(k);
} else {
k = k * 3 + 1;
list.add(k);
}
}
// 각 구간별 면적 구하기
int n = list.size();
double[] areaSum = new double[n]; // 누적합
for (int i = 0; i < n - 1; i++) {
double area = (list.get(i) + list.get(i + 1)) / 2.0;
areaSum[i + 1] = areaSum[i] + area;
}
// ranges의 구간 면적 계산
for (int i = 0; i < ranges.length; i++) {
int a = ranges[i][0];
int b = ranges[i][1];
int end = n - 1 + b; // x좌표: 0 ~ n-1
if (a > end) {
answer[i] = -1.0;
} else {
answer[i] = areaSum[end] - areaSum[a];
}
}
return answer;
}
}
Share article