프로그래머스 | LV.2 우박수열 정적분 - 단순 구현 문풀 (Java)

728x90

⬛ 프로그래머스 | LV.2 우박수열 정적분 - 단순 구현 문풀

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

 

프로그래머스

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

programmers.co.kr

문제 설명 1
우박수열 그래프
문제 설명 2


💚문제 접근 방식

문제를 다 이해하고 나면 그렇게 어려운 문제가 아닌데, 문제에서 주어진 ranges에 대한 내용이 이해가 안돼서 애를 먹었다.

풀이 설명

[풀이]

1) a는 0에서 a만큼 떨어진 지점, b는 맨뒤에서 b만큼 떨어진 지점으로 보아야 한다.

2)  또한, 사다리꼴 공식을 활용해서, 해당 범위에 대한 누적 합을 구해야 한다.

3)  a가 b와 같다면 0.0을

4)  a > b 라면 -1.0을 담아준다.

💚 제출 코드

import java.util.*;

class Solution {
    public List<Double> solution(int k, int[][] ranges) {        
        List<Integer> list = new ArrayList<>();
        int tmp = k;
        while(tmp != 1){
            list.add(tmp);
            if(tmp % 2 == 0) tmp /= 2;
            else tmp = 3*tmp + 1;
        }
        list.add(1);//1 돼서 탈출하니까 
        
        //처리
        List<Double> answer=  new ArrayList<>();
        
        for(int[] x : ranges){
            int a = x[0];
            int b = list.size() + x[1] -1;
                
            if(a == b) {
                answer.add(0.0); 
                continue;
            }
            if(a > b) {
                answer.add(-1.0);
                continue;
            }
            
            if(a < b) {
                double dimens = 0;
                //경계 누적합 
                for(int i =a; i<b; i++){
                    dimens += (list.get(i) + list.get(i+1)) / 2.0;
                }
                answer.add(dimens);
            }
            
        }
        
        return answer;
    }
}

💚회고

문제에 그림이 복잡해 보여도 예제 따라하면서 설명하는 바가 무엇인지를 파악하는 게 중요하다. 이 문제도 다 이해하고 나면 크게 어려운 문제는 아니었지만, 괜히 겁을 먹었다. 침착하게 읽어보고 흐름을 따라가자.

728x90