다중 레벨 정렬 - 우선순위 기반 정렬
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상자: JavaScript 개발자, 데이터 정렬 알고리즘을 활용하는 프로그래머
- 난이도: 중급 (정렬 함수와 조건식 활용)
핵심 요약
- 다중 레벨 정렬은
Array.prototype.sort()
를 사용하여 우선순위 기준을 적용해야 하며,||
연산자로 조건을 간결하게 표현 가능 - 주요 정렬 기준: 점수 내림차순 → 참여일자 오름차순 (동일 점수 시, 이전 기록 우선)
- 정렬 조건식 예시:
scores.sort((a,b) => (b.score - a.score) || (a.updatedAt - b.updatedAt))
섹션별 세부 요약
1. 문제 정의 및 단일 기준 정렬
- 점수 기준으로 내림차순 정렬:
scores.sort((a,b) => b.score - a.score)
- 동일 점수의 경우, 참여일자로 정렬하지 않으면 공정성 문제 발생
- 예시: John, Bob, Dave는 동일 점수로 정렬되지만, 참여일자 기준이 무시됨
2. 잘못된 접근: 두 번의 정렬
scores.sort((a,b) => b.score - a.score)
후scores.sort((a,b) => a.updatedAt - b.updatedAt)
- 결과: 마지막 정렬 기준(참여일자 오름차순)만 반영되어 불공정한 결과 발생
- 예시: Dave(2024-05-30)가 John(2024-06-01)보다 뒤로 정렬됨
3. 다중 조건 정렬 구현
- 조건식:
```javascript
scores.sort((a,b) => {
if (a.score !== b.score) return b.score - a.score;
return a.updatedAt - b.updatedAt;
});
```
- 결과: 점수 내림차순 → 참여일자 오름차순으로 공정한 최종 순위 생성
4. 간결한 구현: `||` 연산자 활용
scores.sort((a,b) => (b.score - a.score) || (a.updatedAt - b.updatedAt))
- 장점: 코드 간결화, 동일 점수 시 참여일자로 자동 정렬
결론
- 다중 레벨 정렬을 위해
sort
함수의 조건식에||
연산자를 활용하여 우선순위 기준을 명확히 설정해야 함 - 공정한 결과를 위해, 주요 정렬 기준과 보조 기준을 명시적으로 정의해야 하며, 단순한 두 번의 정렬은 잘못된 결과를 초래할 수 있음