마이의 개발 블로그

[프로그래머스] 우박수열 정적분 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 우박수열 정적분 (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;
    }
}

 

 

반응형
Comments