{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉정렬〉구간 고유 점수 순위 조회← 이전다음 →
#050 · 정렬쉬움정렬

구간 고유 점수 순위 조회

문제

리그 운영진은 경기마다 기록된 점수를 배열 scores에 순서대로 저장해 두었습니다. 운영진은 특정 구간에서 서로 다른 점수만 추려 낮은 순으로 매긴 순위를 자주 조회합니다.

각 질의 queries[q] = [l, r, k]를 다음과 같이 처리하세요.

  1. scores의 l번째부터 r번째까지(1부터 세는 번호, 양 끝 포함)를 꺼낸다
  2. 그중 중복된 점수는 하나만 남기고 오름차순으로 정렬한다
  3. 정렬 결과의 k번째 값을 답으로 한다. 값이 k개보다 적으면 -1을 답으로 한다

모든 질의의 답을 순서대로 배열에 담아 반환하세요.

function solution(scores: number[], queries: number[][]): number[]

예시

scores = [8,3,8,5,3,9,1], queries = [[1,4,2],[2,6,4],[3,3,1],[1,7,6]] → [5,9,8,-1]

질의 구간 중복 제거 후 정렬 답
[1,4,2] [8,3,8,5] [3,5,8] 5
[2,6,4] [3,8,5,3,9] [3,5,8,9] 9
[3,3,1] [8] [8] 8
[1,7,6] 전체 [1,3,5,8,9] (5개) -1

scores = [4,4,4,4], queries = [[1,4,1],[1,4,2]] → [4,-1]

제약 조건

  • 1 ≤ scores.length ≤ 1,000
  • 1 ≤ scores[i] ≤ 1,000,000
  • 1 ≤ queries.length ≤ 100
  • 각 질의는 1 ≤ l ≤ r ≤ scores.length, 1 ≤ k ≤ scores.length를 만족합니다
  • k가 구간의 고유 점수 개수보다 클 수 있습니다

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

테스트 케이스

예시 1: 네 가지 질의 → [5,9,8,-1]
입력: scores = [8,3,8,5,3,9,1], queries = [[1,4,2],[2,6,4],[3,3,1],[1,7,6]]
출력: [5,9,8,-1]
예시 2: 고유 점수가 하나뿐 → [4,-1]
입력: scores = [4,4,4,4], queries = [[1,4,1],[1,4,2]]
출력: [4,-1]
구간 [20,30]의 2번째 → 30
입력: scores = [10,20,30], queries = [[2,3,2]]
출력: [30]
중복이 섞인 구간 여러 개
입력: scores = [7,2,7,2,9], queries = [[1,5,3],[2,4,1],[5,5,1]]
출력: [9,2,9]
엣지: 원소 하나짜리 배열
입력: scores = [1], queries = [[1,1,1],[1,1,2]]
출력: [1,-1]
두 값이 번갈아 나오는 배열
입력: scores = [5,1,5,1,5,1], queries = [[1,6,2],[3,4,2],[4,4,1]]
출력: [5,5,1]
solution.ts
에디터 로딩 중…

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