Search

우박수열 정적분

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def collatz(n): arr = [n] while n > 1: if n % 2 == 0: n = n // 2 arr.append(n) else: n = 3 * n + 1 arr.append(n) return arr def solution(k, ranges): # ranges가 a, b이고, arr의 길이가 n일 때 # arr[a]부터 arr[n+b] 까지의 합을 구하면 됨 arr = collatz(k) n = len(arr) # area[0] = 0 # area[i] = arr[i-1] ~ arr[i] 까지의 넓이 area = [0] for i in range(1, len(arr)): area.append((arr[i-1] + arr[i]) / 2.0) # cumsum[y] - cumsum[x] 하면 [x, y]의 합이 나옴. cumsum = [] c = 0 for x in area: c += x cumsum.append(c) print(area) print(cumsum) answer = [] for a, b in ranges: if a > n or n+b-1 < a: answer.append(-1) else: answer.append(cumsum[n+b-1] - cumsum[a]) return answer
Python
복사

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges