반응형
스트리밍 데이터 평균값 구하기
- 정수 데이터가 한번에 하나씩 주어진다고 하자.
- 데이터는 최대 size개까지만 받을 수 있다.
- size를 초과해 값이 들어오면 오래된 값부터 삭제된다.
- size 범위로 MovingAvg 클래스를 초기화하고 nextVal함수로 새로운 값을 받고 현재까지의 평균을 리턴한다.
풀이
import queue
class MovingAvg():
def __init__(self, size):
self.size = size
self.myQue = queue.Queue()
self.sum = 0
def nextVal(self, num):
self.myQue.put(num)
self.sum += num
if (self.myQue.qsize() == (self.size+1)):
self.sum -= self.myQue.get()
qsize = self.myQue.qsize()
return self.sum / qsize
def main():
queueExample()
nums = [2,8,19,37,4,5]
ma = MovingAvg(3)
results = []
for num in nums:
avg = ma.nextVal(num)
results.append(avg)
print(results) # [2.0, 5.0, 9.666666666666666, 21.333333333333332, 20.0, 15.333333333333334]
- 객체이므로 sum이라는 변수를 따로 지정하고 현재까지 저장된 데이터들의 값을 저장하도록 했다.
- 매번 합을 새로 구하는 것보다 유리하다.
- 다른 경우에도 이렇게 매번 비슷한 값을 요구할 경우엔 아예 인스턴스화를 해놓는 것도 좋은 방법인 것 같다.
반응형
'💻 CS > 알고리즘 연습' 카테고리의 다른 글
[알고리즘 연습] 트리 경로의 합 (0) | 2020.07.27 |
---|---|
[알고리즘 연습] 이진트리 깊이별로 나누기 (0) | 2020.07.24 |
[알고리즘 연습] 배열의 회전 (0) | 2020.07.19 |
[알고리즘 연습] 0 이동시키기 (0) | 2020.07.18 |
[알고리즘 연습] 주어진 숫자를 1로 만들기 위한 최소 횟수 구하기 (0) | 2020.07.17 |