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 |
Tags
- 과제진행하기
- 지도 여러개
- 코어자바스크립트
- div2개
- solved.ac플래티넘
- 두원사이의정수쌍
- 최소스패닝트리
- 정렬
- 이중지도
- Lv3
- 백준알고리즘
- 프로그래머스
- 5강클로저
- DP
- JS
- JS스터디
- 알고리즘 문제풀이
- 우박수열정적분
- c++
- React.StrictMode
- 2023카카오블라인드코테
- 비트마스크
- pccp기출문제
- Lv2
- solved.ac골드
- [pccp 기출문제]
- 알고리즘문제풀이
- 백준 알고리즘
- 스택
- 타겟넘버
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
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [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