본문 바로가기
코딩테스트 파이썬/파이썬 프로그래머스 2단계

우박수열 정적분

by 세용용용용 2024. 7. 4.

업데이트 사항

수정 : 2024-07-04 [시간 복잡도 추가]

 

 

코딩테스트 연습 - 우박수열 정적분 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

나의 코드

# 2024-07-04
def collatz(number):
    answer=[number]
    while True:
        if number%2==0:
            number//=2
        else:
            number=(number*3)+1
        answer.append(number)
        if number==1:
            break
    print(answer)
    return answer

def solution(k, ranges):
    answer=[]
    collatz_list = collatz(k)
    size = [(collatz_list[i]+collatz_list[i+1])/2 for i in range(len(collatz_list)-1)]
    
    n = len(size)
    for rg in ranges:
        start, end = rg
        end=n+end
        if start>end:
            answer.append(-1)
        elif start==end:
            answer.append(0)
        else:
            answer.append(sum(size[start:end]))

    return answer

 

시간 복잡도

1. collatz_list : 콜라츠 리스트 생성 >> k 가 1이 될떄까지 반복 (선형시간)

2. size : 넓이 리스트 생성 >> 역시 모든 콜라츠 리스트를 탐색하므로 (선형시간)

3. for rg in ranges : ranges 리스트를 순회하며 최종 넓이를 계산 >> 모든 ranges 리스트를 순회하며 size배열을 해당범위를 순회하며 합을 계산하므로 (이차형 시간)

 

즉, 최종 시간 복잡도는 이차형시간 복잡도 입니다. ( O(n2) )

'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글

후보키  (0) 2024.07.08
광물 캐기  (0) 2024.07.05
멀쩡한 사각형  (0) 2024.07.03
문자열 압축  (2) 2024.07.02
Softeer 연습문제(2단계) - 바이러스  (0) 2024.06.25