문제 설명 및 제한사항
아이디어 및 해결 방법
코드
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