알고리즘 문제 풀이/Javascript

[node.js] 백준 8979 올림픽

맛대 2025. 2. 3. 22:39

https://www.acmicpc.net/problem/8979

로직

  • 정렬 사용
    • 금,은,동 순서대로 중요도로 정렬
  • 정렬 완료 후 국가 K를 찾은 후, 같은 등수 나라가 있는지 확인하는 방식
const solution = (N,K,arr) =>{
    arr.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];
    })
    for (let rank=0; rank<=N;rank++){
        const [idx,gold,silver,bronze] = arr[rank];
        if (idx === K){
            for (let totalRank=rank-1;totalRank>=0;totalRank--){
                const data = arr[totalRank];
                if (gold === data[1] && silver === data[2] && bronze === data[3]) continue
                else return totalRank+2
            }
            return 1
        }
    }
}

// 입력
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let [original_N,N,K] = [-1,-1,-1];
let arr;

rl.on('line', (line)=>{
    if (N==-1){
        [N,K] = line.split(' ').map(Number);
        original_N = N;
        arr = Array.from({length:N+1});
    } else if(N == 0){
        rl.close();
    } else {
        N --;
        const [i,gold,silver,bronze] = line.split(' ').map(Number);
        arr[i] = [i,gold,silver,bronze];
    }
});
rl.on('close',()=>{
   const ans = solution(original_N,K,arr)
   console.log(ans)
})

후기

  • python의 정렬에 익숙해서 javascript의 정렬 방식이 너무 불편하게 느껴졌다. arr.sort(key= lamda x:(x[0],x[1])
  • const data = [1,2,3]; 일경우 data === [1,2,3]이 false이기에 금은동 개수가 같은지를 && 연산자로 연결하는데 좀 불편하게 느껴졌다.