코딩연습

[백준 알고리즘] Node.js 1205. 등수 구하기

니 뽀 2023. 11. 22. 17:31

1. 문제

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

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

 

2. 풀이

  • 태수의 새로운 점수가 몇등을 기록할 수 있는지 확인하는 문제이다.
  • sort 메서드와 indexOf 메서드를 이용하여 순위를 구하는 함수를 만들어서 풀었다.
const [N, newScore, P, ...list] = require('fs').readFileSync('/dev/stdin')
                                  .toString().trim().split(/\s/).map(v => +v);

const findRank = () => {
  const minScore = Math.min.apply(null, list); // 기존 점수들 중 가장 작은 값.

  if(list.length === 0) return {score : newScore, rank : 1}; // 만약 리스트가 비어있다면 1등!

  // 순위권에 들어갈 수 없다면 -1
  if(list.length >= P && newScore <= minScore) return {score : newScore, rank : -1}; 

  const newList = list.concat(newScore); // 태수의 새로운 점수 추가.
  const sortedList = newList.sort((a,b) => b-a) // 점수 추가 후, 내림차순 정렬.
  const ranks = sortedList.map(v => {
    return {score : v, rank : sortedList.indexOf(v) + 1} // 점수와 순위 표시.
  });
  
  return ranks.find(rank => rank.score === newScore) // 새로운 점수가 몇등인지 출력.
}

// findRank 함수의 리턴은 { score : 점수, rank : 순위 } 형태이기에 .rank 써줘야함.
console.log(findRank().rank);

 

3. 정리