eaz_coding

[Programmers] 우박수열 정적분(Python, Javascript) 본문

eaz_algorithm

[Programmers] 우박수열 정적분(Python, Javascript)

eaz_silver 2024. 6. 26. 09:27

문제

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

 

프로그래머스

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

programmers.co.kr


풀이

Python

def collatz(k):
    result = [k]
    while k > 1:
        if k % 2:
            k = k*3+1
        else:
            k //= 2
        result.append(k)
    return result

def solution(k, ranges):
    answer = []
    lst = collatz(k)
    n = len(lst)
    
    for a, b in ranges:
        t = 0
        if b <= 0:
            b = n + b
        
        if a >= b:
            answer.append(-1.0)
            continue
            
        for i in range(a, b-1):
            t += (lst[i] + lst[i+1]) / 2
        answer.append(t)  
        
    return answer

 

Javascript

function collatz(k) {
    let lst = [k];
    
    while (k > 1) {
        if (k % 2 == 0) {
            k /= 2;
        } else {
            k = k*3 + 1;
        }
        lst.push(k);
    }
    return lst;
}
function solution(k, ranges) {
    var answer = [];
    const lst = collatz(k);
    const n = lst.length;
    
    for (let i = 0; i<ranges.length; i++){
        let [a, b] = ranges[i];
        if (b <= 0) {
            b = n + b;
        }
        
        if (b <= a) {
            answer.push(-1.0);
            continue
        }
        t = 0;
        for (let j=a; j < b-1; j++){
            t += (lst[j]+lst[j+1]) / 2;
        }
        answer.push(t);
        
    }
    return answer;
}