우박 수열 정적분

최민수·2023년 3월 3일
0

알고리즘

목록 보기
26/94
seq = []

# 우박 수열 구하기
def getSeq(k):
    global seq
    while(True):
        seq.append(k)
        
        # 1-1 짝수
        if k % 2 == 0:
            k /= 2
        else: # 1-2 홀수
            k = k*3+1
        
        # 2. 결과 <= 1
        if k <= 1:
            seq.append(k)
            break

def solution(k, ranges):
    global seq
    answer = []

    # 우박 수열
    getSeq(k)
    
    for xx, yy in ranges:
        result = 0.0
        
        # 시작, 끝 x좌표 구하기
        start = xx
        end = len(seq) - 1 + yy
        
        # 시작점 > 끝점 예외처리
        if start > end:
            result = -1
        elif start == end:
            result = 0
        else:
            # 정적분
            for j in range(start, end):
                result += max(seq[j+1], seq[j]) - (abs(seq[j+1] - seq[j]) / 2)
        
        answer.append(result)
    
    return answer
  • 문제 조건이 복잡해 보여서 그렇지, 차근차근 조건만 따라가면 쉽게 풀리는 문제였음.
  • 조건에 나온 예외처리 상황들도 꼼꼼히 체크해주는 것이 필요.

출처: 프로그래머스 연습문제, https://school.programmers.co.kr/learn/challenges

profile
CS, 개발 공부기록 🌱

0개의 댓글