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

최동혁·2022년 12월 9일
0

프로그래머스

목록 보기
20/68

풀이 방법

  1. 주어지는 배열 ranges에서 원소 a는 시작지점, b는 끝 점으로 부터의 offset이다.
    1.1 만약 a가 2, b가 -3인데 우박수열 끝 점의 x좌표가 6이라면 [2, 3]이다.
    1.2 끝인 6에서부터 -3만큼 떨어진 지점이 최종 범위인것이다.
  2. 각 지점의 등변사다리꼴을 전부 구해서 배열에 넣으면서 누적으로 더해갔다.
    2.1 예를들어 0~0은 0이기 때문에 [0]
    2.2 0~1은 3이라면 [0, 3]
    2.3 1~2가 5라면 [0, 3, 8]
    2.4 구간 index로 넓이를 쉽게 구하기 위해서 누적 합을 이용하였다.
    2.5 그래서 만약 [2, 5]의 구간의 넓이를 구하려면 sum_list[5] - sum_list[2]로 쉽게 구할 수 있다.

풀이 코드

def solution(k, ranges):
    answer = []
    sum_list = [0]
    while k != 1:
        prev_k = k
        if k % 2 == 0:
            k = k // 2
        else:
            k = k * 3 + 1
        sum_list.append((prev_k + k) / 2 + sum_list[-1])
    end = len(sum_list) - 1
    for start, offset in ranges:
        range_end = end + offset
        if start == range_end:
            answer.append(0)
        elif start > range_end:
            answer.append(-1)
        else:
            answer.append(sum_list[range_end] - sum_list[start])
    return answer
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글