-
프로그래머스 우박수열_정적분(python)Algorithm/프로그래머스_생각정리 2022. 12. 6. 23:55
def solution(k, ranges): answer = [] height = [] width = [] while k != 1: height.append(k) if k % 2 == 0: k //= 2 else: k = k * 3 + 1 height.append(1) width.append((height[0] + height[1]) / 2) for i in range(1,len(height)-1): width.append((height[i] + height[i+1]) / 2 + width[i-1]) for x,y in ranges: y = len(height)-1 + y if x > y: answer.append(-1.0) elif x == y: answer.append(0.0) else: if x == 0: answer.append(width[y-1]) else: answer.append(width[y-1] - width[x-1]) return answer
처음에 k 부터 시작하여 높이를 저장할 리스트 height와 height리스트를 기반으로 사다리꼴 누적 합을 저장할 width리스트를 구현을 한다. 여기서 사다리꼴 누적 합이라고 한 이유는 정적분으로 구하는 모든 구간은 사다리 모양이고 평면좌표상 x를 기준으로 오른쪽으로 갈수록 사다리꼴의 합을 누적해서 리스트에 저장해갈 것이다.
생각 없이 ranges에서 꺼내온 변수 이름을 x,y로 지정했는데 헷갈리지 않게 범위가 시작하는 지점, 끝나는 지점 start,end라고 생각하면 이해하기 쉬울 것 같으니 start,end라고 말하겠다. end에다가 우박수열 그래프 상 x 좌표 끝 값을 더해준다. (문제에서 x좌표에대한 상대적인 오프셋이라고 말해줬기 때문에) start가 end보다 크면 -1.0을 리턴하고 같으면 0.0 둘다 아니라면 x가 0일 때를 고려해줘야한다. 파이썬에서 인덱스에다가 마이너스 값을 넣어버리면 리스트 마지막 값을 불러내기 때문이다.(그러면 y가 0일때는 이라는 생각이 드실 수도 있겠지만 이미 위에서 if문이나 elif문에서 걸러집니다.)
정답률과 문제 지문 길이를 봤을 때 쉽지 않을 꺼라고 생각했지만 막상 문제를 다 읽고 문제에서 시키는 대로 구현을 해보니 어렵지는 않은 문제였다.
'Algorithm > 프로그래머스_생각정리' 카테고리의 다른 글
프로그래머스_광물캐기_level2(python) (0) 2023.03.26 프로그래머스_두 큐 합 같게 만들기_level2(python) (0) 2023.03.23 프로그래머스_level 2_리코쳇 로봇(python) (0) 2023.03.19 프로그래머스_주차 요금 계산(python) (0) 2022.12.08 프로그래머스 택배상자(python) (0) 2022.10.18