문제
https://school.programmers.co.kr/learn/courses/30/lessons/134239
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public ArrayList<Double> solution(int k, int[][] ranges) {
ArrayList<Double> answer=new ArrayList<>();
// key: 우박 그래표 x좌표, value: 우박 그래표 y좌표
Map<Integer, Integer> map=new HashMap<>();
int idx=0;
map.put(0,k);
while(k!=1){
if(k%2==0){
k/=2;
}
else{
k=k*3+1;
}
map.put(++idx,k);
}
// sum[1] -> 0<=x<=1 넓이 누적합, sum[2] -> 0<=x<=2 넓이 누적합
double[] sum= new double[map.size()];
for(int i=1; i<map.size(); i++){
int high=Math.max(map.get(i),map.get(i-1));
int low=Math.min(map.get(i),map.get(i-1));
sum[i]=sum[i-1]+high-((high-(double)low)/2);
}
// ranges 순회
for(int[] r:ranges){
// 유효하지 않은 구간
if(r[0]>map.size()+r[1]-1) answer.add(-1.0);
else{
// 누적합을 이용한 [a,b]의 넓이 -> sum[b]-sum[a-1]
answer.add(sum[map.size()+r[1]-1]-sum[r[0]]);
}
}
return answer;
}
}
'문제풀이 > 기타' 카테고리의 다른 글
[JAVA] Pro n^2 배열 자르기 (0) | 2023.07.25 |
---|---|
[JAVA] Pro 롤케이크 자르기 (0) | 2023.07.24 |
[JAVA] 백준 22233 가희와 키워드 (0) | 2023.07.20 |
[JAVA] Pro 숫자 카드 나누기 (0) | 2023.07.20 |
[JAVA] Pro 귤 고르기 (0) | 2023.07.19 |