[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습

[알고리즘 연습] 제한된 공간의 스트리밍 데이터 평균값 구하기

inu 2020. 7. 23. 17:19
반응형

스트리밍 데이터 평균값 구하기

  • 정수 데이터가 한번에 하나씩 주어진다고 하자.
  • 데이터는 최대 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이라는 변수를 따로 지정하고 현재까지 저장된 데이터들의 값을 저장하도록 했다.
  • 매번 합을 새로 구하는 것보다 유리하다.
  • 다른 경우에도 이렇게 매번 비슷한 값을 요구할 경우엔 아예 인스턴스화를 해놓는 것도 좋은 방법인 것 같다.
반응형