[프로그래머스] 우박수열 정적분

단간단간·2024년 4월 23일
0

알고리즘 문제

목록 보기
80/106

문제 링크:

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

python

def solution(k, ranges):
    # 콜라츠 추측 리스트 구하기
    collatz_list = [k]
    while k != 1:
        if k % 2 == 0:
            k = k // 2
        else:
            k = k * 3 + 1

        collatz_list.append(k)

    # 콜라츠 추측 누적 넓이 구하기
    collatz_area_list = [0]
    for i in range(len(collatz_list) - 1):
        area = (collatz_list[i] + collatz_list[i + 1]) / 2
        collatz_area_list.append(collatz_area_list[-1] + area)
	
    # 정적분 결과값 구하기
    width = len(collatz_list) - 1
    result = []
    for a, b in ranges:
        b = width + b
        area = collatz_area_list[b] - collatz_area_list[a] if a <= b else -1

        result.append(area)

    return result


if __name__ == "__main__":
    result = solution(k=5, ranges=[[0, 0], [0, -1], [2, -3], [3, -3]])

    print(result)
[33.0, 31.5, 0.0, -1]
profile
simple is best

0개의 댓글