FrontEnd/프로그래머스

[JS] 우박수열 정적분

728x90

1. 콜라츠 추측 배열 만들기

2. 각 구간별 넓이를 미리 구해두기

3. map 함수를 활용해서 넓이로 반환하기

 

 

 

조금 헷갈릴만한 부분이 범위인것 같다.

 

[0,0] 이 왜 전체범위를 나타내는지 이해할 수 있다면 쉽게 풀 수 있다. 문제에 콜라츠 추측의 우측 끝이 정해져 있지 않기 때문에 

 

[a,b] 로 표시된 숫자가 a는 0부터, b는 콜라츠 추측의 맨 끝을 0이라 가정하고 풀기 때문이다.

 

즉 , 실제로는 [a,b] 라면

 

[a , ary.length-1+b] 식을 사용해야지 우리가 평상시 쓰던 idx값들을 얻을 수 있다.

 

 

 

 

function solution(k, ranges) {
    const ary = [k]
    while (k !== 1) {
        if (k%2) k = k*3 + 1
        else k = k/2
        ary.push(k)
    }
    
    const areaList = []
    for (let i = 0 ; i < ary.length-1 ; i++) {
        const min_ = Math.min(ary[i],ary[i+1])
        const max_ = Math.max(ary[i],ary[i+1])
        areaList.push(min_ + (max_-min_)/2 )
    }
    
    return ranges.map(([a,b]) => {
        b = ary.length-1+b
        if (a>b) return -1
        let ret = 0
        
        for (let i = a ; i < b ; i++) {
            ret += areaList[i]
        }
        return ret
    })
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 택배상자  (0) 2023.06.06
[JS] 롤케이크 자르기  (0) 2023.06.05
[JS] 숫자 카드 나누기  (0) 2023.06.03
[JS] 귤 고르기  (0) 2023.06.02
[JS] 점 찍기  (0) 2023.06.02