▶ 코테 준비/프로그래머스 문제풀이

[JAVA] 프로그래머스 - 우박수열 정적분

휴학생감자 2022. 11. 23. 15:44

<출처>

프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

https://school.programmers.co.kr/learn/courses/30/lessons/134239

 

프로그래머스

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

programmers.co.kr

 

 


 

 

<방법> ArrayList에 변수 k값을 저장, 그래프를 높이가 1인 사다리꼴의 형태로 나누어 생각하여 계산

public static double[] Solution(int k, int[][] ranges) {
    ArrayList<Integer> nums = new ArrayList<>();
    nums.add(k);

    while (k != 1) {
        k = k%2 == 0? k/2 : k*3+1; 
        nums.add(k);
    }

    double[] answer = new double[ranges.length];
    for (int i = 0; i < ranges.length; i++) {
        int start = ranges[i][0];
        int end = nums.size() - 1 + ranges[i][1];

        if (start == end) {
            answer[i] = 0.0;
            continue;
        }
        if (start > end) {
            answer[i] = -1.0;
            continue;
        }

        float sum = nums.get(start) + nums.get(end);
        start++;
        while (start < end) {
            sum += (nums.get(start) * 2);
            start += 1;
        }
        answer[i] = sum / 2;
    }

    return answer;
}