본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.2)

[프로그래머스] Level2 우박수열 정적분(python)

by 윤무무 2023. 3. 23.

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

 

프로그래머스

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

programmers.co.kr

 

1. 문제 해결 방법
def solution(k, ranges):
    x_list = [k] #우박수열 list, 처음에 k 값 넣어주고 시작
    sum_list = [0] #누적합 list
    result = [] #결과 담을 list
    
    while k!=1: #우박수열 구하기
        if k % 2 == 0: 
            k = k // 2
        else:
            k = k*3 + 1
        x_list.append(k)
        
    for i in range(len(x_list)-1): #정적분의 누적합 구하기
        sum_list.append(sum_list[i] + (x_list[i] + x_list[i+1]) / 2)
       

    for i in ranges: #투포인터를 이용해 누적합[end]-누적합[start]
        start = i[0]
        end = i[1] + (len(sum_list)-1) #누적합을 0부터 시작해서 -1 해줌
        
        if start>end: #시작점보다 끝점이 클 경우
            result.append(-1.0)
        else:
            result.append(sum_list[end] - sum_list[start])
    
    return result

 

* result가 float형으로 구성되어있기 때문에 //가 아닌 /를 이용해서 문제를 해결한다.

댓글