Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 타겟넘버
- c++
- 백준알고리즘
- DP
- JS스터디
- 과제진행하기
- 최소스패닝트리
- React.StrictMode
- 비트마스크
- 2023카카오블라인드코테
- Lv2
- JS
- 스택
- 알고리즘 문제풀이
- pccp기출문제
- 지도 여러개
- 정렬
- Lv3
- 프로그래머스
- 알고리즘문제풀이
- 5강클로저
- solved.ac골드
- solved.ac플래티넘
- [pccp 기출문제]
- 백준 알고리즘
- 두원사이의정수쌍
- 이중지도
- 코어자바스크립트
- div2개
- 우박수열정적분
Archives
- Today
- Total
호지
[프로그래머스] 우박수열 정적분 문제풀이 JS 본문
문제만 이해하면 쉬운 문제이다!
주어진 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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 2번/ 석유시추 문제풀이 JS (5) | 2024.07.23 |
---|---|
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 문제풀이 JS (0) | 2024.07.22 |
[프로그래머스] 숫자카드 나누기 문제풀이 JS (0) | 2023.09.19 |
[프로그래머스] 귤 고르기 문제풀이 JS (0) | 2023.09.19 |
[프로그래머스] 테이블 해시 함수 문제풀이 JS (0) | 2023.09.12 |
Comments