{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉정렬〉사내 리그 최종 순위표← 이전다음 →
#099 · 정렬중간다중 키 비교 함수,문자열 파싱

사내 리그 최종 순위표

문제

사내 풋살 리그가 모두 끝나 최종 순위표를 만들려 합니다. records[i]는 한 팀의 성적이며 "팀명 승 무 패 득점 실점" 형식의 문자열로, 각 항목은 공백 하나로 구분됩니다.

두 값을 먼저 계산합니다.

  • 승점 = 승 × 3 + 무 × 1
  • 골득실 = 득점 − 실점

순위는 다음 기준을 위에서부터 차례로 적용해 정합니다.

  1. 승점이 많은 팀이 앞
  2. 승점이 같으면 골득실이 큰 팀이 앞
  3. 골득실까지 같으면 득점이 많은 팀이 앞
  4. 그것마저 같으면 팀명을 모두 소문자로 바꿨을 때의 사전순 으로 앞선 팀이 앞

상위 k개 팀의 팀명을 순위 순서대로 담은 문자열 배열을 반환하는 solution(records, k) 함수를 작성하세요. 팀명은 입력에 적힌 원래 표기 그대로 반환합니다.

예시

records=["Nova 3 1 0 9 4", "atlas 3 1 0 8 4", "Bolt 2 0 2 6 6"], k=2 → ["Nova", "atlas"]
  Nova  승점 10, 골득실 +5
  atlas 승점 10, 골득실 +4  → 승점이 같아 골득실로 갈림
  Bolt  승점 6
 
records=["kite 2 2 0 7 3", "Lynx 2 2 0 5 1", "moss 1 1 2 4 6"], k=3 → ["kite", "Lynx", "moss"]
  kite·Lynx 모두 승점 8, 골득실 +4 → 득점이 많은 kite(7)가 앞
 
records=["Zeta 1 0 1 2 2", "alpha 1 0 1 2 2", "Mango 1 0 1 2 2"], k=3 → ["alpha", "Mango", "Zeta"]
  세 팀의 승점·골득실·득점이 모두 같으므로 소문자 기준 사전순

제약 조건

  • 1 ≤ records.length ≤ 100,000
  • 1 ≤ k ≤ records.length
  • 팀명은 영문 대소문자로만 이루어진 길이 1~10의 문자열이며, 소문자로 바꿔도 서로 중복되지 않습니다.
  • 0 ≤ 승, 무, 패 ≤ 1,000
  • 0 ≤ 득점, 실점 ≤ 10,000 (골득실은 음수가 될 수 있습니다)
  • 반환 배열의 길이는 항상 k입니다.

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

테스트 케이스

예시 1: 승점 동률 → 골득실로 갈림
입력: records = ["Nova 3 1 0 9 4","atlas 3 1 0 8 4","Bolt 2 0 2 6 6"], k = 2
출력: ["Nova","atlas"]
예시 2: 승점·골득실 동률 → 득점 많은 팀 우선
입력: records = ["kite 2 2 0 7 3","Lynx 2 2 0 5 1","moss 1 1 2 4 6"], k = 3
출력: ["kite","Lynx","moss"]
예시 3: 성적 전부 동률 → 소문자 기준 사전순
입력: records = ["Zeta 1 0 1 2 2","alpha 1 0 1 2 2","Mango 1 0 1 2 2"], k = 3
출력: ["alpha","Mango","Zeta"]
팀 1개 (전패, 골득실 음수)
입력: records = ["solo 0 0 3 1 9"], k = 1
출력: ["solo"]
무승부·1승 팀이 모두 승점 3 → 음수 골득실 비교
입력: records = ["pine 0 3 0 3 3","Oak 0 3 0 2 4","elm 1 0 2 5 8"], k = 3
출력: ["pine","Oak","elm"]
solution.ts
에디터 로딩 중…

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