문제 : https://school.programmers.co.kr/learn/courses/30/lessons/134239
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근 :
- 주어진 조건 대로 연산을 수행한다.
1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2.결과로 나온 수가 1보다 크다면 1번 작업을 반복합니다.
- 각 인덱스에 해당하는 정적분을 계산하여 저장한다.
- 0 ~ 끝까지 누적합을 계산하여 저장한다.
- range 입력에 따라서 누적합을 이용하여 해당범위의 넓이를 구한다.
코드 구현 :
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
List<Integer> res = new ArrayList<>();
res.add(k);
while(k > 1){
if(k%2 == 0) k = k/2;
else k = 3*k + 1;
res.add(k);
}
double[] answer = new double[ranges.length];
double[] temp_sum = new double[res.size()];
int a,b;
temp_sum[0] = 0;
for(int i = 1 ; i < res.size() ; i++){
if(res.get(i-1) < res.get(i)){
a = i;
b = i-1;
}else{
a = i-1;
b = i;
}
temp_sum[i] = temp_sum[i-1] + (double) (res.get(a) - res.get(b))/2 + res.get(b);
}
double before, after;
for(int i = 0 ; i < ranges.length ; i++){
if(temp_sum.length + ranges[i][1] < 1 || ranges[i][0] >= temp_sum.length ){
answer[i] = -1;
continue;
}
before = temp_sum[ranges[i][0]];
after = temp_sum[temp_sum.length + ranges[i][1] - 1];
answer[i] = after - before;
answer[i] = answer[i] < 0 ? -1 : answer[i];
}
return answer;
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 프로그래머스 이모티콘 할인행사_구현 (2) | 2024.09.25 |
---|---|
[JAVA] 프로그래머스 신고 결과 받기_구현 (1) | 2024.09.04 |
[JAVA] 프로그래머스 디펜스 게임_우선순위 큐 (0) | 2024.08.30 |
[JAVA] 프로그래머스 리코쳇 로봇_탐색 (2) | 2024.08.28 |
[JAVA] 백준 1339 단어수학_Map (0) | 2024.08.12 |