문제 링크
풀이
let [n, ...arr] = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
const names = [];
arr = arr
.map(v => v.split(" ").map(vv => Number(vv)||vv))
.sort((a, b) => {
if (a[1] < b[1]) return 1
else if (a[1] > b[1]) return -1
else {
if (a[2] > b[2]) return 1
else if (a[2] < b[2]) return -1
else {
if (a[3] < b[3]) return 1
else if (a[3] > b[3]) return -1
else {
if (a[0] > b[0]) return 1
else if (a[0] < b[0]) return -1
else return 0
}
}
}
});
arr.forEach(v => names.push(v[0]));
console.log(names.join("\n"));
[이름, 국어점수, 영어점수, 수학점수] 배열을 원소로 갖는 배열 arr를 주어진 기준에 맞게 정렬하는 함수를 sort의 콜백 함수로 받아 정렬하였다.
2021-08-06 풀이
const [n, ...arr] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const names = [];
arr
.map(v => v.split(' ').map(vv => Number(vv)||vv))
.sort((a, b) => {
const aScore = (100-a[1])*10**6 + a[2]*10**3 + (100-a[3]);
const bScore = (100-b[1])*10**6 + b[2]*10**3 + (100-b[3]);
if (aScore === bScore) {
if (a[0] > b[0]) return 1
else if (a[0] < b[0]) return -1
else return 0
} else {
return aScore - bScore;
}
})
.forEach(v => names.push(v[0]));
console.log(names.join('\n'));
3개의 점수를 한 번에 비교할 수 있도록 바꾸어서 실행 시간이 약간 감소하였다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 11656] 접미사 배열 with Node.js (0) | 2021.04.22 |
---|---|
[백준 2193] 이친수 with Python (0) | 2021.04.22 |
[백준 2606] 바이러스 with Python (0) | 2021.04.20 |
[백준 2960] 에라토스테네스의 체 with Node.js (0) | 2021.04.18 |
[백준 4949] 균형잡힌 세상 with Node.js (0) | 2021.04.17 |