문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/134239
풀이방법
- temp에 k를 저장하고, k에 k가 짝수이면 k/2, 홀수이면 k*3+1을 해준 값을 저장한다.
- 사다리꼴 넓이 공식을 이용해서 (밑변(=temp)+아랫변(k))/2를 해서 area에 저장해준다.
이 과정을 k가 1이 될 때까지 반복한다.
이제 위에서 구한 count 값과 area 배열을 가지고 계산을 해준다. - 주어진 ranges를 돌면서 범위를 구해준다. 예를 들어 [0,-1]이 주어진다면 0은 그대로 두고 count에서 -1을 해준 값으로 바꿔준다.
- 3번에서 구한 범위를 가지고 area의 값들을 더해준 값을 answer에 저장해주면 끝!
정답코드
function solution(k, ranges) {
var answer = [];
let area = []; // 넓이를 저장할 배열
let count = 0; // 우박수열이 1이 될때까지의 횟수
while (k != 1) {
let temp = k;
k = k % 2 == 0 ? k / 2 : k * 3 + 1;
area.push(parseFloat((temp + k) / 2));
count++;
}
ranges.map((range) => {
range[1] = count + range[1];
if (range[0] > range[1]) return answer.push(-1);
let sum = 0;
for (let i = range[0]; i < range[1]; i++) {
sum += area[i];
}
return answer.push(sum);
});
return answer;
}
'Programmers' 카테고리의 다른 글
[Programmers]여행경로/JS (0) | 2024.06.06 |
---|---|
[Programmers]산 모양 타일링[JS] (0) | 2024.04.13 |
[Programmers]야근 지수/JS (5) | 2024.04.07 |
[Programmers]캐시/JS (1) | 2024.04.05 |
[Programmers]등굣길/JS (2) | 2024.04.04 |