[백준] - 8979 올림픽 (node.js)

밀루·2025년 1월 14일
0

BOJ

목록 보기
48/82

문제링크

코드

// 올림픽

const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const arr = fs.readFileSync(filePath).toString().trim().split("\n");

const [n, k] = arr[0].split(" ").map(Number);

let m = [];
for (let i = 1; i <= n; i++) {
  let l1 = arr[i].split(" ").map(Number);
  m.push(l1);
}

m.sort((a, b) => { // 메달에 맞춰 정렬
  if (a[1] !== b[1]) {
    return b[1] - a[1];
  }
  if (a[2] !== b[2]) {
    return b[2] - a[2];
  }
  return b[3] - a[3];
});

let rank = 1;

if (m[0][0] === k) { // k가 정렬된 m의 첫번째에 있을 때 (1위인 경우)
  console.log(rank);
} else { // 아닌 경우
  for (let i = 1; i < n; i++) {
    const [prev, pg, ps, pb] = m[i - 1];
    const [cur, cg, cs, cb] = m[i];

    // 금메달, 은메달, 동메달 개수에 따라 rank = i + 1
    // 자신보다 잘한 나라 수(m이 정렬되어 있으므로 i와 같음) + 1
    // 이전과 금은동 모두 동일한 경우 i-1에서 계산된 등수가 출력됨
    if (pg > cg) rank = i + 1;
    else if (ps > cs) rank = i + 1;
    else if (pb > cb) rank = i + 1;

    if (cur === k) {
      console.log(rank);
      break;
    }
  }
}

원래는 rank라는 배열에 메달 비교해서 각 나라의 등수를 집어넣는 식으로 구현했는데 점점 까다로워지고,, 놓치는 것도 생기고 그래서.. 결국 아래 블로그 참고해서 풀었다... 나중에 다시 풀어봐야겠다..

참고링크

profile
이밀루의 도전

0개의 댓글