작은 수 + (큰 수 - 작은 수) / 2
ranges
에 대해 반복하면서 구간의 넓이 더해 결과에 담기function solution(k, ranges) {
const collatz = [k];
const area = [];
while (k > 1) {
if (k % 2 === 0) k /= 2;
else k = k * 3 + 1;
collatz.push(k);
const [small, big] = [collatz.at(-1), collatz.at(-2)];
area.push(small + (big - small) / 2);
}
const result = [];
for (const r of ranges) {
const [start, end] = [r[0], area.length + r[1]];
if (start > end) {
result.push(-1);
continue;
}
let tmp = 0;
for (let i = start; i < end; ++i) {
tmp += area[i];
}
result.push(tmp);
}
return result;
}
요즘 계속 어려워서 좀 지쳐 있었는데 갑자기 쉬어가는 문제 감사합니다...