{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉해시〉짧은 간격 반복 이벤트 경보← 이전다음 →
#008 · 해시쉬움최근 등장 위치,슬라이딩 윈도우

짧은 간격 반복 이벤트 경보

문제

서비스 모니터링 시스템은 이벤트 스트림에서 같은 이벤트가 너무 촘촘하게 반복되는지 감시합니다.

이벤트 코드가 발생 순서대로 담긴 배열 events와 감시 간격 k가 주어집니다. 서로 다른 두 위치 i < j에 대해

  • events[i] === events[j] (같은 이벤트가 다시 발생했고)
  • j - i ≤ k (그 사이 간격이 k 이하)

인 쌍이 하나라도 있으면 경보를 울려야 합니다.

경보를 울려야 하면 true, 아니면 false를 반환하는 solution(events, k) 함수를 작성하세요.

예시

events = ["LOGIN", "PAY", "LOGIN", "VIEW"], k = 2
→ true
  LOGIN이 0번과 2번에서 발생했고 간격이 2로 k 이하다.
 
events = ["LOGIN", "PAY", "LOGIN", "VIEW"], k = 1
→ false
  같은 이벤트 쌍의 간격이 2라서 k = 1을 넘는다.
 
events = ["PUSH", "QUIT", "READ", "PUSH"], k = 2
→ false
  PUSH가 두 번 나오지만 간격이 3이다.
 
events = ["Z", "Z"], k = 0
→ false
  서로 다른 위치의 간격은 최소 1이므로 k = 0이면 경보는 절대 울리지 않는다.

제약 조건

  • 1 ≤ events.length ≤ 100,000
  • 이벤트 코드는 영대문자 1~10자 문자열입니다
  • 0 ≤ k ≤ 100,000
  • 같은 이벤트 코드가 세 번 이상 등장할 수 있습니다

시간 복잡도 목표: O(N)

테스트 케이스

예시 1: LOGIN 간격 2, k = 2
입력: events = ["LOGIN","PAY","LOGIN","VIEW"], k = 2
출력: true
예시 2: 같은 입력이지만 k = 1
입력: events = ["LOGIN","PAY","LOGIN","VIEW"], k = 1
출력: false
예시 3: 반복은 있으나 간격이 3
입력: events = ["PUSH","QUIT","READ","PUSH"], k = 2
출력: false
예시 4: 엣지 - k = 0이면 항상 false
입력: events = ["Z","Z"], k = 0
출력: false
반복되는 이벤트가 아예 없는 경우
입력: events = ["JOIN","PAY","VIEW"], k = 5
출력: false
엣지: 바로 이어지는 반복
입력: events = ["ERR","ERR"], k = 1
출력: true
두 이벤트가 번갈아 등장하는 경우
입력: events = ["X","Y","X","Y","X"], k = 2
출력: true
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.