728x90
문제
https://www.acmicpc.net/problem/8979
풀이
이 문제의 경우는 정렬과 구현을 해야하는 문제이다.
각 나라별 금, 은, 동 메달의 개수에 따른 정렬을 해준다.
arr.sort((a, b) => {
if (b[1] > a[1]) return 1;
else if (b[1] === a[1]) {
if (b[2] > a[2]) return 1;
else if (b[2] === a[2]) {
if (b[3] > a[3]) return 1;
else if (b[3] === a[3]) return 0;
else return -1;
} else return -1;
} else return -1;
});
이어서 각 나라별 등수를 매겨야하는데, 주의할 점은 같은 등수인 나라의 개수를 새어야한다.
같은 등수의 나라의 수만 새서는 안된다. 그 다음 등수로 오는 나라의 등수에 이전 등수 나라 수를 더해 등수를 매긴뒤 같은 등수의 나라 수를 1로 초기화 해줘야한다. 왜냐하면, 이제는 같은 등수의 나라가 현재 순회중인 나라 한곳이기 때문이다.
arr[0][4] = 1;
for (let i = 1; i < n; i++) {
if (
arr[i - 1][1] === arr[i][1] &&
arr[i - 1][2] === arr[i][2] &&
arr[i - 1][3] === arr[i][3]
) {
arr[i][4] = arr[i - 1][4];
same++;
} else {
arr[i][4] = arr[i - 1][4] + same;
same = 1;
}
}
코드
const input = require("fs")
.readFileSync(
process.platform === "linux" ? "/dev/stdin" : __dirname + "/example.txt"
)
.toString()
.trim()
.split("\n");
const [n, k] = input.shift().split(" ").map(Number);
const arr = input.map((e) => [...e.split(" ").map(Number), 0]);
let same = 1;
arr.sort((a, b) => {
if (b[1] > a[1]) return 1;
else if (b[1] === a[1]) {
if (b[2] > a[2]) return 1;
else if (b[2] === a[2]) {
if (b[3] > a[3]) return 1;
else if (b[3] === a[3]) return 0;
else return -1;
} else return -1;
} else return -1;
});
arr[0][4] = 1;
for (let i = 1; i < n; i++) {
if (
arr[i - 1][1] === arr[i][1] &&
arr[i - 1][2] === arr[i][2] &&
arr[i - 1][3] === arr[i][3]
) {
arr[i][4] = arr[i - 1][4];
same++;
} else {
arr[i][4] = arr[i - 1][4] + same;
same = 1;
}
}
console.log(arr.find((e) => e[0] === k)[4]);
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[JS] 2941_크로아티아 알파벳 (0) | 2025.03.20 |
---|---|
[JS] 1976_여행 가자 (0) | 2025.03.18 |
[JS] 최단경로 (0) | 2024.11.28 |
[JS] 마법사 상어와 비바라기 (0) | 2024.11.27 |
[JS] 2573_빙산 (0) | 2024.11.26 |