728x90
https://school.programmers.co.kr/learn/courses/30/lessons/134239
분석
k =5
ranges = [0,0],[0,-1],[2,-3],[3,-3]]
5 라면 5 ⇒ 16 ⇒ 8 ⇒ 4 ⇒2 ⇒ 1 이되어 총 5번만에 1
tmp = [5.0, 16, 8.0, 4.0, 2.0, 1.0]
평행사변형의 넓이 = (변+변)*높이/2
x :0~1 ➔ (5+16)*1/2 = 10.5
x :1~2 ➔ (16+8)*1/2 = 12.0
x :2~3 ➔ (8+4)*1/2 = 6.0
x :3~4 ➔ (4+2)*1/2 = 3.0
x :4~5 ➔ (2+1)*1/2 = 1.5
iList = [10.5, 12.0, 6.0, 3.0, 1.5]
ranges : 구간의 시작은 음이 아닌 정수, 구간의 끝은 양이 아닌 정수로 표현
[0, 0] = 0~5 넓이 = 33.0
[0,-2] = 0~4 넓이 = 31.5
[2,-3] = 2~2 넓이 = 0.0
[3,-3] = 3~2넓이 = 1.0
[33.0, 31.5, 0.0, -1.0]
풀이
def solution(k, ranges):
answer = [0.0]*len(ranges)
tmp=[float(k)]
while k!=1:
if k%2==1:
k=k*3+1
else:
k/=2
tmp.append(k)
iList=[]
for x in range(1, len(tmp)):
iList.append((tmp[x]+tmp[x-1])/2)
for i in range(len(ranges)):
s, e = ranges[i]
e=len(iList)+e
if e-s<0:
answer[i]=-1.0
elif s==e:
answer[i]=0.0
else:
val=0
for x in range(s,e):
val+=iList[x]
answer[i]=val
return answer
728x90