코딩테스트/프로그래머스
[프로그래머스] 우박수열 정적분 (Java)
개발자마이
2023. 1. 25. 00:22
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근 방식
제시된 용어와 그래프에 잠깐 당황하긴 했으나 이해하고보니 구간별 면적을 구하여 더하면 해결할 수 있는 문제였다.
로직 설명
- 숫자 k에 대한 우박수열을 구하여 ArrayList에 저장함 (구간별 그래프의 높이)
- 제시된 x좌표 유효 여부 판별 후 예외처리
- 제시된 x좌표들을 기준으로 구간별 면적 산출 후 더해주기 (사다리꼴: (윗변 + 아랫변) * 높이 / 2)
작성 코드
import java.util.*;
class Solution {
public double[] solution(int k, int[][] ranges) {
double[] answer = new double[ranges.length];
List<Integer> list = new ArrayList<>();
while(k > 1){
list.add(k);
if(k % 2 == 0){
k /= 2;
}else{
k = k * 3 + 1;
}
}
list.add(k);
for(int i = 0; i < ranges.length; i++){
if(ranges[i][0] > ranges[i][1] + list.size() - 1){
answer[i] = -1;
continue;
}else if(ranges[i][0] == ranges[i][1] + list.size() - 1){
answer[i] = 0;
continue;
}
double dimension = 0;
for(int j = ranges[i][0]; j < ranges[i][1] + list.size() - 1; j++){
dimension += (list.get(j) + list.get(j + 1)) / 2.0;
}
answer[i] = dimension;
}
return answer;
}
}
반응형