Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 우박수열 정적분 - 134239 본문

프로그래머스

[level 2] 우박수열 정적분 - 134239

csct3434 2024. 2. 29. 03:30

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.LinkedList;
import java.util.List;

class Solution {

    public double[] solution(int k, int[][] ranges) {
        double[] answer = new double[ranges.length];
        List<Integer> sequences = calcSequences(k);

        for (int i = 0; i < ranges.length; i++) {
            answer[i] = getArea(sequences, ranges[i]);
        }
        return answer;
    }

    private List<Integer> calcSequences(int k) {
        LinkedList<Integer> sequences = new LinkedList<>();

        while (k != 1) {
            sequences.add(k);

            if (k % 2 == 0) {
                k /= 2;
            } else {
                k = k * 3 + 1;
            }
        }

        sequences.add(1);
        return sequences;
    }

    private double getArea(List<Integer> sequences, int[] range) {
        int n = sequences.size() - 1;

        int xA = range[0];
        int xB = n + range[1];

        if (xA > xB) {
            return -1;
        }

        double area = 0;
        for (int x = xA; x + 1 <= xB; x++) {
            area += (sequences.get(x) + sequences.get(x + 1)) * 0.5;
        }

        return area;
    }
}