728x90
문제
https://www.acmicpc.net/problem/10825
코드
//실버4 국영수
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\r\n");
let answer = []; //정답이 될 이름들을 담을 배열
let N = parseInt(input.shift()); //학생 수
input = input
.map((i) => i.split(" ").map((j) => Number(j) || j)) //input의 각 요소에 대해 공백기준으로 나누어서 배열화하고, number형으로 변환가능한 건 변환하고 아니면 string 그대로 변환
.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;
}
}
}
});
input.forEach((i) => answer.push(i[0])); //조건대로 정렬된 input의 이름만 push
console.log(answer.join("\n")); //한줄단위로 이름 출력
후기
- 정렬문제 자체는 어렵지 않았으나 맨 처음 input의 '학생이름 국어점수 영어점수 수학점수'를 학생이름만 string으로 받고, 나머지는 number 형으로 받는 방법에서 막혔는데, 다른 분의 풀이를 참고하여 해결하였다
- map을 이중으로 쓰며 "|| 연산자"의 특성을 활용하여 Number형으로 변환 가능한 것은 number로 바꿔주고 아닌것은 원래 string그대로 받을 수 있는 방법이 신박했다
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 접미사 배열 / JavaScript / node.js (0) | 2022.02.03 |
---|---|
[백준] 시리얼 번호 / JavaScript / node.js (0) | 2022.02.03 |
[백준] K번째 수 / JavaScript / node.js (0) | 2022.02.03 |
[백준] 알파벳 개수 / JavaScript / node.js (0) | 2022.02.02 |
[백준] 먹을 것인가 먹힐 것인가 / JavaScript / node.js (0) | 2022.02.01 |