반응형
문제분석:
문제가 꽤나 난해한 문제다.
해야할일 3줄요약:
1. 콜라츠 추측으로 수열 만들기
2. 수열의 구간마다 넓이 구하기
3. 주어진 ranges로 정적분 구하기
1. 콜라츠 추측으로 수열만들기 + 2. 수열의 구간마다 넓이구하기
콜라츠 추측으로 점을 하나찍고, 이전의 점 current와 비교하여 넓이를 찍어 저장한다.
3. 주어진 ranges로 정적분구하기
여기서 정적분은 쉽게 말하자면 구간의 넓이다.
<설명을 이해하기 본인도 좀 걸렸다.>
EX) [1,-3] -> 1부터 마지막수열 -3까지의 넓이
[3,-2] -> 3부터 마지막수열 -2까지의 넓이
단, 시작점이 끝점보다 크면, 고정적으로 -1를 반환해야한다.
문제풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
double[] answer = {};
List<Double> list = new ArrayList<>();
int current=0;
while(k!=1){
current=k;
if(k%2==0){
k/=2;
}
else{
k=k*3+1;
}
if(Math.max(current,k)==k){
list.add((k-current)/2.0+current);
}
else{
list.add((current-k)/2.0+k);
}
}
double[] arr=list.stream().mapToDouble(i->i).toArray();
List<Double> list2 = new ArrayList<>();
for(int i=0;i<ranges.length;i++){
double total=0;
int[] temp = ranges[i];
for(int j=temp[0];j<arr.length+temp[1];j++){
total+=arr[j];
}
if((arr.length+temp[1])-temp[0]<0){
total=-1;
}
list2.add(total);
}
return list2.stream().mapToDouble(i->i).toArray();
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스, Java] Level2: 디펜스 게임 (1) | 2022.12.10 |
---|---|
[프로그래머스,Java] Level2: 점 찍기 (0) | 2022.12.02 |
[프로그래머스,Java] Level2:귤 고르기 (0) | 2022.11.24 |
[프로그래머스,Java] Level2: 숫자 카드 나누기 (0) | 2022.11.24 |
[프로그래머스,Java] Level2: 혼자 놀기의 달인 (0) | 2022.11.12 |