{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉스택〉응답시간 스파이크 거리← 이전다음 →
#121 · 스택중간단조 스택,스팬

응답시간 스파이크 거리

문제

당신은 서버 모니터링 대시보드를 개발하고 있습니다. 서버는 1초 간격으로 응답시간(ms)을 기록하며, times[i]는 i번째 시점의 응답시간입니다.

대시보드에는 각 시점마다 "직전 스파이크까지의 거리" 를 표시해야 합니다. i번째 시점의 직전 스파이크란, i보다 앞선 시점 중 응답시간이 times[i]보다 엄격히 큰(>) 가장 가까운 시점을 말합니다.

각 시점 i에 대해:

  • 직전 스파이크 시점 j(j < i, times[j] > times[i] 중 가장 큰 j)가 존재하면 거리 i - j를 기록합니다.
  • 존재하지 않으면(앞선 시점이 모두 자신 이하이면) 0을 기록합니다.

응답시간 기록 배열 times가 주어질 때, 각 시점의 직전 스파이크까지의 거리를 담은 배열을 반환하는 solution(times) 함수를 작성하세요.

예시

times 결과
[120, 80, 100, 90, 150, 130] [0, 1, 2, 1, 0, 1]
[40, 30, 20, 10] [0, 1, 1, 1]
[50, 50, 50] [0, 0, 0]

예시 1 설명:

  • 시점 0: 앞선 시점이 없으므로 0
  • 시점 1(80): 시점 0(120)이 더 크므로 거리 1
  • 시점 2(100): 시점 1(80)은 100 이하, 시점 0(120)이 더 크므로 거리 2
  • 시점 3(90): 시점 2(100)가 더 크므로 거리 1
  • 시점 4(150): 앞선 시점 중 150보다 큰 값이 없으므로 0
  • 시점 5(130): 시점 4(150)가 더 크므로 거리 1

예시 3 설명: 응답시간이 같으면(엄격히 크지 않으면) 스파이크로 보지 않습니다.

제약 조건

  • 1 ≤ times.length ≤ 100,000
  • 1 ≤ times[i] ≤ 1,000,000,000 (정수)
  • 반환 배열의 길이는 times.length와 같아야 합니다.

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

테스트 케이스

예시 1: 일반적인 스파이크 혼합
입력: times = [120,80,100,90,150,130]
출력: [0,1,2,1,0,1]
예시 2: 단조 감소 — 항상 바로 직전이 스파이크
입력: times = [40,30,20,10]
출력: [0,1,1,1]
예시 3: 동일 값 연속 — 엄격히 크지 않으면 스파이크 아님
입력: times = [50,50,50]
출력: [0,0,0]
단조 증가 — 직전 스파이크가 전혀 없음
입력: times = [10,20,30,40]
출력: [0,0,0,0]
원소 1개
입력: times = [7]
출력: [0]
solution.ts
에디터 로딩 중…

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