ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1207 / 1500
자료구조난이도 하5분 답변 목표 · 보강본

실시간 게임 랭킹에서 상위 K명, 임의 사용자의 순위, 보상 확정을 각각 어떤 자료구조와 기준으로 처리하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

실시간 랭킹에서는 상위 K명 표시, 임의 사용자의 정확한 순위 조회, 보상 확정을 서로 다른 문제로 나누겠습니다. 상위 K명만 자주 계산하면 전체 점수를 보며 크기 K의 최소 힙을 유지할 수 있지만, 임의 사용자의 순위에는 전체 정렬 인덱스나 순서 통계 구조가 필요합니다. 보상은 현재 움직이는 랭킹을 읽어 지급하지 말고 마감 시점의 불변 집계 버전을 기준으로 확정해야 합니다.

실시간 표시와 확정을 분리합니다

점수 스트림을 한 번 훑으며 상위 K만 유지하면 메모리는 K에 비례하고 각 후보 갱신은 로그 K 비용으로 처리할 수 있습니다. 다만 이 힙은 K 밖 사용자들의 상대적 순서를 보존하지 않아 임의 사용자가 몇 등인지 바로 알 수 없습니다. 전체 순서가 필요하면 정렬된 인덱스, 순서 통계 트리, 데이터베이스의 순위 질의, 구간별 집계 같은 구조를 검토합니다. 근사 순위를 허용하면 구간 카운터로 비용을 줄일 수 있지만 정확한 순위와는 다른 계약입니다.

점수 갱신은 이전 점수를 정확히 제거하고 새 점수를 반영해야 합니다. 동점이면 (점수 내림차순, 달성 시각 오름차순, 사용자 ID)처럼 보조 키를 고정해야 페이지 경계가 흔들리지 않습니다. 같은 점수 이벤트가 재전달되면 단순 증가 연산은 점수를 두 번 올립니다. 이벤트 ID 처리 원장, 버전 비교, 절대 점수 갱신 중 하나로 중복을 막고, 지연 이벤트가 현재 집계에 들어갈지 마감 집계로 갈지도 정합니다. 이를 랭킹의 결정적 정렬 키(deterministic ranking key)와 멱등 갱신(idempotent update)으로 설명할 수 있습니다.

표시와 확정을 분리합니다

실시간 화면은 수 초 지연과 캐시를 허용할 수 있지만 보상은 계산 중인 자료구조에 의존하면 안 됩니다. 마감 시각, 집계 버전, 동점 규칙을 봉인하고 그 버전에서 전역 후보를 확정합니다. 마감 중 들어온 이벤트는 다음 집계로 보내거나 별도 보류 상태로 남겨 재처리 결과를 재현할 수 있어야 합니다. 샤드가 있다면 모든 샤드가 같은 버전과 정렬 규칙으로 응답해야 합니다.

검증은 대규모 동점, 점수 역전, 중복·지연 이벤트, 페이지 경계에서의 갱신, 확정 집계 재실행을 포함합니다. 화면 순위와 보상 대상이 같은 비교 규칙을 사용하는지 재계산하고, 성능은 조회 시간뿐 아니라 갱신 지연·메모리·확정 결과 재현성으로 평가하겠습니다.

상위 K를 크기 K 힙으로 유지하면 전체 점수를 한 번 훑는 배치에서 메모리를 줄일 수 있지만, 점수가 계속 바뀌는 자료구조를 증분 갱신할 때는 경계 밖 후보가 필요합니다. 예를 들어 현재 K=2가 A=100, B=90이고 C=80이 밖에 있을 때 B가 0으로 감소하면 C가 새 2위가 되어야 하지만, K 후보만 저장했다면 C를 복구할 정보가 없습니다. 따라서 전체 정렬 인덱스, K 밖 후보를 포함한 경계 자료구조, 또는 재스캔 원장을 선택해야 합니다.

페이지를 읽는 사이 점수가 바뀌면 같은 사용자가 중복되거나 누락될 수 있으므로 cursor에 마지막 비교 키와 집계 버전을 넣습니다. 점수 이벤트는 이벤트 ID·단조 버전으로 중복과 지연을 처리하고, 보상은 화면용 현재 랭킹과 분리된 봉인 집계에서 확정합니다. 확정 계산을 재실행해도 동일한 대상과 금액이 나오는지 검증하겠습니다.

K 주변의 유한한 여분 후보는 재스캔 횟수를 줄이지만 반복적인 점수 감소로 그 후보까지 소진되면 원본을 다시 읽어야 합니다. 임의 사용자의 정확한 순위가 자주 필요하면 서브트리 크기를 저장한 순서 통계 트리에서 앞선 원소 수를 누적하는 방법을 검토합니다. 점수 변경 시 기존 키 삭제와 새 키 삽입, 크기 갱신이 일관되게 수행되어야 합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 상위 K·임의 순위·보상 확정을 서로 다른 자료구조와 시점 문제로 분리한다.
  • 동점 보조 키와 중복 이벤트 방지로 랭킹의 결정성과 정확성을 설명한다.
  • 실시간 표시와 마감 버전 확정의 계약을 분리해 재현성을 확보한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 크기 K 힙만으로 모든 사용자의 정확한 순위를 제공한다고 말한다.
  • 동점 규칙이 없어도 페이지와 보상 순서가 안정적이라고 가정한다.
  • 재전달된 점수 이벤트를 그대로 누적하거나 현재 화면을 보상 기준으로 삼는다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기