코딩 테스트

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

지직파 2023. 2. 13. 16:53

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

 

프로그래머스

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

programmers.co.kr

우박수열로 만든 꺾은선 그래프의 일정 구간 넓이를 구하는 문제이다.

 

 

코드

import itertools
def solution(k, ranges):
    answer = []
    sum=[0]
    while k!=1:
        if k%2==0:
            next_k=k/2
            sum.append(next_k*1.5)
        else:
            next_k=k*3+1
            sum.append(k+(next_k-k)*0.5)
        k=next_k
    area=list(itertools.accumulate(sum))
    for start, end in ranges:
        end_index=len(area)+end-1
        if start>end_index:
            answer.append(-1)
        else:
            answer.append(area[end_index]-area[start])
    return answer​

범위가 A~B인 그래프의 넓이를 구할 때, 0~B범위의 넓이 - 0~A범위의 넓이인 점을 이용해서 풀었다. (여기서 범위는 x축)

배열 area는 구간마다 넓이를 따로 구한 배열 sum을 누산한 것이다.

itertools 라이브러리의 accumulate()를 이용해서 area를 만들었다.

 

처음엔 범위마다 따로 넓이를 구하는 방식으로 짜다가 비효율적이여서 이러한 방식으로 짜게 되었다. 짜기 전에 더 효율적인 방법은 없을까 생각하는 과정이 더 필요한 것 같다.