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 |