[프로그래머스] 우박수열 정적분 (JS)

hhkim·2023년 11월 25일
0

Algorithm - JavaScript

목록 보기
186/188
post-thumbnail

풀이 과정

  1. 콜라츠 수열을 구하면서 각 구간의 넓이를 배열에 저장
    각 구간의 넓이: 작은 수 + (큰 수 - 작은 수) / 2
  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;
}

🦾

요즘 계속 어려워서 좀 지쳐 있었는데 갑자기 쉬어가는 문제 감사합니다...

0개의 댓글