문제 설명
문제 설명: m명의 학생과 n개의 시험이 있는 반이 있습니다. 0부터 시작하는 m x n 정수 행렬 score가 주어지며, 각 행은 학생을 나타내고 score[i][j]는 i번째 학생이 j번째 시험에서 받은 점수를 나타냅니다. 이 행렬 score는 서로 다른 정수만 포함합니다. 또한, 정수 k가 주어집니다. k번째(0부터 시작) 시험의 점수를 기준으로 학생들(즉, 행렬의 행)을 내림차순으로 정렬하세요. 정렬된 행렬을 반환하세요.
예제
예제 1
예제 2
예제 3
예제 4
⚠️제약 조건
- •
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메서드는 두 요소a와b를 비교합니다. 여기서a와b는 각각 학생의 점수 배열입니다.b[k] - a[k]를 계산하여,b[k]가 더 크면b가a보다 앞에 오도록 정렬합니다. 즉,k번째 시험 점수를 기준으로 내림차순 정렬을 수행합니다. -
return score: 정렬된score배열을 반환합니다.
3. 각 단계별 동작 과정
-
입력 받기:
score는 학생들의 시험 점수를 담고 있는 2차원 배열이고,k는 기준이 되는 시험의 인덱스입니다. -
정렬 수행:
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]를 사용하여 점수가 높은 순서대로 정렬합니다.
- 예를 들어,
-
결과 반환: 정렬된
score배열을 반환합니다.
4. 핵심 변수들의 역할
score: 학생들의 시험 점수를 담고 있는 2차원 배열입니다.k: 정렬의 기준이 되는 시험의 인덱스입니다.a,b:sort메서드의 비교 함수 내에서 사용되는 두 학생의 점수 배열입니다. 이 배열의k번째 요소를 비교하여 정렬 순서를 결정합니다.
5. 왜 이 방법이 효과적인지
이 방법은 sort 메서드를 사용하여 간단하고 효율적으로 문제를 해결합니다. sort 메서드는 내부적으로 최적화된 정렬 알고리즘을 사용하므로, 대규모 데이터에서도 비교적 빠르게 정렬을 수행할 수 있습니다. 또한, 비교 함수를 통해 원하는 기준(k번째 시험 점수)으로 정렬할 수 있어 문제의 요구 사항을 정확하게 충족합니다.
이렇게 해서 학생들의 점수를 원하는 기준으로 정렬할 수 있습니다. 이 코드는 간결하면서도 문제의 요구 사항을 정확하게 해결하는 데 효과적입니다.