DEV

LeetCode #2545보통

2545. 학생들을 k번째 점수로 정렬하기

2545. Sort The Students By Their Kth Score

Sorting
해설 읽기 3
javascript

문제 설명

문제 설명: m명의 학생과 n개의 시험이 있는 반이 있습니다. 0부터 시작하는 m x n 정수 행렬 score가 주어지며, 각 행은 학생을 나타내고 score[i][j]는 i번째 학생이 j번째 시험에서 받은 점수를 나타냅니다. 이 행렬 score는 서로 다른 정수만 포함합니다. 또한, 정수 k가 주어집니다. k번째(0부터 시작) 시험의 점수를 기준으로 학생들(즉, 행렬의 행)을 내림차순으로 정렬하세요. 정렬된 행렬을 반환하세요.

예제

예제 1

입력: score = [[10,6,9,1],[7,5,11,2],[4,8,3,15]], k = 2
출력: [[7,5,11,2],[10,6,9,1],[4,8,3,15]]
설명: 위의 그림에서 S는 학생을, E는 시험을 나타냅니다.

예제 2

입력: score = [[3,4],[5,6]], k = 0
출력: [[5,6],[3,4]]
설명: 위의 그림에서 S는 학생을, E는 시험을 나타냅니다.

예제 3

입력: score = [[10,6,9,1],[7,5,11,2],[4,8,3,15]], k = 2
출력: [[7,5,11,2],[10,6,9,1],[4,8,3,15]]
설명: 위의 그림에서 S는 학생을, E는 시험을 나타냅니다.

예제 4

입력: score = [[3,4],[5,6]], k = 0
출력: [[5,6],[3,4]]
설명: 위의 그림에서 S는 학생을, E는 시험을 나타냅니다.

⚠️제약 조건

  • m == score.length

  • n == score[i].length

  • 1 <= m, n <= 250

  • 1 <= score[i][j] <= 105

  • score는 서로 다른 정수들로 이루어져 있습니다.

  • 0 <= k < n

해결 방법

🎯접근 방식

이 문제는 주어진 학생들의 점수 행렬을 특정 시험의 점수를 기준으로 내림차순 정렬하는 문제입니다. 이를 위해 JavaScript의 내장 함수인 sort를 사용하여, 각 학생의 k번째 시험 점수를 기준으로 비교하여 정렬합니다. 핵심 아이디어는 행렬의 각 행을 k번째 열의 값에 따라 내림차순으로 정렬하는 것입니다.

솔루션 코드

복잡도 분석

시간 복잡도:O(n log n)
공간 복잡도:O(1)

💡상세 설명

이 문제는 학생들의 시험 점수를 기반으로 학생들을 정렬하는 문제입니다. 주어진 score 행렬에서 각 행은 한 학생의 시험 점수를 나타내며, k번째 시험 점수를 기준으로 학생들을 내림차순으로 정렬해야 합니다. 이제 이 문제를 해결하는 코드를 단계별로 설명하겠습니다.

1. 알고리즘의 핵심 아이디어

이 문제의 핵심은 특정 시험(k번째 시험)의 점수를 기준으로 학생들을 정렬하는 것입니다. JavaScript의 sort 메서드를 사용하여 간단하게 해결할 수 있습니다. sort 메서드는 배열을 정렬할 때 비교 함수를 사용할 수 있도록 해줍니다. 이 비교 함수를 통해 각 학생의 k번째 시험 점수를 비교하여 정렬 순서를 결정합니다.

2. 코드의 주요 로직 설명

var sortTheStudents = function(score, k) {
    score.sort((a, b) => b[k] - a[k]);
    return score;
};
  • score.sort((a, b) => b[k] - a[k]): 이 부분이 핵심 로직입니다. score 배열을 정렬하는데, sort 메서드는 두 요소 ab를 비교합니다. 여기서 ab는 각각 학생의 점수 배열입니다. b[k] - a[k]를 계산하여, b[k]가 더 크면 ba보다 앞에 오도록 정렬합니다. 즉, k번째 시험 점수를 기준으로 내림차순 정렬을 수행합니다.

  • return score: 정렬된 score 배열을 반환합니다.

3. 각 단계별 동작 과정

  1. 입력 받기: score는 학생들의 시험 점수를 담고 있는 2차원 배열이고, k는 기준이 되는 시험의 인덱스입니다.

  2. 정렬 수행: score.sort()를 사용하여 학생들을 k번째 시험 점수를 기준으로 내림차순으로 정렬합니다.

    • 예를 들어, score = [[10,6,9,1],[7,5,11,2],[4,8,3,15]]이고 k = 2라면, 각 학생의 2번째 시험 점수는 각각 9, 11, 3입니다.
    • sort 메서드는 비교 함수 (a, b) => b[k] - a[k]를 사용하여 점수가 높은 순서대로 정렬합니다.
  3. 결과 반환: 정렬된 score 배열을 반환합니다.

4. 핵심 변수들의 역할

  • score: 학생들의 시험 점수를 담고 있는 2차원 배열입니다.
  • k: 정렬의 기준이 되는 시험의 인덱스입니다.
  • a, b: sort 메서드의 비교 함수 내에서 사용되는 두 학생의 점수 배열입니다. 이 배열의 k번째 요소를 비교하여 정렬 순서를 결정합니다.

5. 왜 이 방법이 효과적인지

이 방법은 sort 메서드를 사용하여 간단하고 효율적으로 문제를 해결합니다. sort 메서드는 내부적으로 최적화된 정렬 알고리즘을 사용하므로, 대규모 데이터에서도 비교적 빠르게 정렬을 수행할 수 있습니다. 또한, 비교 함수를 통해 원하는 기준(k번째 시험 점수)으로 정렬할 수 있어 문제의 요구 사항을 정확하게 충족합니다.

이렇게 해서 학생들의 점수를 원하는 기준으로 정렬할 수 있습니다. 이 코드는 간결하면서도 문제의 요구 사항을 정확하게 해결하는 데 효과적입니다.

관련 문제