본문 바로가기
프로그래머스/Javascript

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

by 29살아저씨 2025. 4. 6.
반응형

📌 문제 요약

프로그래머스의 "우박수열 정적분" 문제는 우박수열을 구성한 뒤, 정적분 값을 계산하는 문제입니다. 우박수열은 특정 수가 1이 될 때까지 홀수면 3배 + 1, 짝수면 2로 나누는 방식으로 계산합니다.
이 문제에서는 우박수열이 만들어내는 계단식 그래프 아래 넓이를 계산해야 합니다.

🧠 핵심 개념

  • 우박수열 구하기
  • 좌표 범위(ranges)마다 면적(정적분 값) 계산
  • 삼각형이 아닌 사다리꼴의 넓이 공식 사용

💡 풀이 접근

  1. 우박수열을 배열로 구한다 (예: [k, ..., 1])
  2. range 배열을 순회하면서, 각 구간에 대해 넓이를 계산한다
  3. 넓이는 사다리꼴 넓이 공식: (윗변 + 아랫변) / 2
  4. 시작 인덱스가 끝 인덱스보다 크면 -1을 반환

💻 자바스크립트 풀이

function solution(k, ranges) {
  // 우박수열 정적분 구하기
  let arr = [k];
  var answer = [];

  // 1. 우박수열 만들기
  while (k !== 1) {
    k = k % 2 === 1 ? k * 3 + 1 : k / 2;
    arr.push(k);
  }

  // 2. 정적분 계산
  ranges.forEach(range => {
    let x1 = range[0];
    let x2 = arr.length - 1 + range[1]; // range[1]은 뒤에서부터 뺀 값
    let integral = 0;

    // x1이 x2보다 크면 잘못된 범위 → -1
    if (x1 > x2) {
      answer.push(-1);
      return;
    }

    // 3. 사다리꼴 넓이 공식 사용
    for (let i = x1; i < x2; i++) {
      integral += (arr[i] + arr[i + 1]) / 2;
    }

    answer.push(integral);
  });

  return answer;
}

✅ 예제

solution(5, [[0,0],[0,-1],[2,-3]]) 를 실행하면
우박수열 [5,16,8,4,2,1]에 대해 각각 정적분 구간의 넓이를 계산합니다.

📝 마무리

이 문제는 단순 구현처럼 보이지만, 정적분이라는 수학적 개념을 사다리꼴 넓이로 환산해서 계산해야 하기 때문에 꽤 흥미로운 문제였습니다.
평소 단순 수열 문제와는 다르게 시각적으로 사고하며 접근해보세요!

반응형

댓글