호지

[프로그래머스] 우박수열 정적분 문제풀이 JS 본문

알고리즘/프로그래머스

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

_hoji

문제만 이해하면 쉬운 문제이다!

주어진 k에 대해 우박수열을 구하는데,

각각의 원소와 몇번의 변환이 필요한지 구한다.(sequece와 n)

while문으로 k가 1이 아닐 때까지 확인하면서

짝수일 때는 나누기 2, 홀수 일때는 곱하기 3 더하기 1을 하면된다

 

그 후 n번 만큼 각 영역의 면적을 구하면 되는데

면적은 가로길이(x축)는 1이고, 왼쪽과 오른쪽의 y축 좌표를 알고 있으므로

사각형 넓이 + 삼각형 넓이를 구한다고 생각하면 면적을 구할 수 있다.

 

주어진 ranges를 하나씩 순회하면서,

시작점과 끝점을 각각 구해서

해당 위치에서의 면적의 합을 구한 뒤 answer에 push하면 원하는 결과를 구할 수 있다.

function solution(k, ranges) {
  let answer = []
  let sequence = [k]
  let area = []
  let n = 0
  while (k !== 1) {
    if (k % 2 === 0) k /= 2
    else k = k * 3 + 1
    sequence.push(k)
    n++
  }

  for (let i = 0; i < n; i++) {
    area[i] = sequence[i + 1] - (sequence[i + 1] - sequence[i]) / 2
  }
  for (const range of ranges) {
    let start = range[0]
    let end = n + range[1]
    let result = 0
    for (let i = start; i < end; i++) {
      result += area[i]
    }
    if (start > end) result = -1
    answer.push(result)
  }
  return answer
}

https://school.programmers.co.kr/learn/courses/30/lessons/134239

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Comments