문제
RecentCounter(): 최근 요청 수를 0으로 초기화합니다.int ping(int t): t 밀리초 시점에 새로운 요청을 추가합니다. 그리고 최근 3000밀리초 동안 발생한 요청의 수(새 요청 포함)를 반환합니다. 즉, 요청이 [t - 3000, t] 구간(양쪽 모두 포함)에 몇 번 발생했는지 반환해야 합니다.각 ping 호출의 t 값은 이전 호출보다 항상 더 큰 값을 갖는 것이 보장됩니다.
호출 예시
RecentCounter rc = new RecentCounter();
rc.ping(1); // 반환값: 1
rc.ping(100); // 반환값: 2
rc.ping(3001); // 반환값: 3
rc.ping(3002); // 반환값: 3
각 호출마다 최근 3000밀리초 내의 요청 수를 반환합니다.
이렇게 최근 3000밀리초 범위 내 요청 개수를 카운트해주는 클래스를 설계하면 됩니다.
아이디어
class RecentCounter {
Queue<Integer> que;
public RecentCounter() {
que = new ArrayDeque<>();
}
public int ping(int t) {
que.add(t);
for (Integer i : que) {
if (i < t - 3000) {
que.remove();
} else {
break;
}
}
return que.size();
}
}


너무 Queue 사용에 집착한건가 싶음
ArrayDeque라서 메모리 사용면에서는 기대한 것보다 높아서 맘에 드는데 런타임 성능은 맨 꼭대기가 아니라 살짝 욕심나네
그래도 후에 들어오는 t 값이 계속 높은 값이라 선입선출이 중요하다 생각했어서 Queue 사용을 채택함
int cnt 변수를 사용해서 cnt++ 하자니 계속 높은 값이 들어오면 이전 값들은 비교할 필요도 없어서 삭제하는 방법으로
'💻알고리즘' 카테고리의 다른 글
| [LeetCode] 104. Maximum Depth of Binary Tree (0) | 2025.10.30 |
|---|---|
| [LeetCode] 206. Reverse Linked List (0) | 2025.10.21 |
| [LeetCode] 1207. Unique Number of Occurrences (0) | 2025.09.03 |
| [LeetCode] 724. Find Pivot Index (0) | 2025.09.03 |
| [LeetCode] 2215. Find the Difference of Two Arrays (0) | 2025.09.03 |