Algorithm/릿코드

99클럽 코테 스터디 25일차 933. Number of Recent Calls 최근 요청의 수

Albosa2lol 2024. 6. 24. 04:48

https://leetcode.com/problems/number-of-recent-calls/description/

 

여러분은 최근 요청을 기록하고, 지난 3000밀리초(또는 3초) 동안 몇 개의 요청이 있었는지를 세는 클래스를 작성해야 합니다.

클래스 RecentCounter는 다음과 같은 메서드를 가져야 합니다:

  • RecentCounter(): 객체를 초기화합니다.
  • int ping(int t): 주어진 t(밀리초) 시점에서 요청을 기록하고, 최근 3000밀리초 동안(즉, [t-3000, t] 간격 내) 발생한 모든 요청의 수를 반환합니다.

주의사항:

  1. 시스템은 millisecond 단위의 시간만 처리합니다.
  2. 시스템 시간은 증가하지 않을 수 있습니다. 즉, t 값은 순서대로 증가하는 보장이 없으며, 같은 시간이 반복될 수 있습니다.
  3. ping 메서드는 시간 t가 증가하는 순서대로 호출될 것이라는 보장이 있습니다.
  4. 모든 시간은 음이 아닌 정수입니다.
  5. 1초는 1000 밀리초입니다.

 

풀이

 

from collections import deque

class RecentCounter:

    def __init__(self):
        # ping 타임스탬프를 저장할 큐를 초기화
        self.queue = deque()

    def ping(self, t: int) -> int:
        # 새 ping 타임스탬프를 큐에 추가
        self.queue.append(t)
        
        # 현재 시간 t에서 3000밀리초 이전의 타임스탬프를 모두 제거
        while self.queue and self.queue[0] < t - 3000:
            self.queue.popleft()
        
        # 최근 3000밀리초 동안의 ping 수를 반환
        return len(self.queue)

# RecentCounter 객체는 아래와 같이 인스턴스화 및 호출
# obj = RecentCounter()
# param_1 = obj.ping(t)