KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 그래프
  • js
  • LeetCode
  • 수학
  • C++
  • Level 2
  • 문자열
  • Level 1
  • string
  • recursion
  • codeup
  • 백준
  • 정렬
  • Level1
  • programmers
  • Level 0
  • 다이나믹 프로그래밍
  • C
  • tree
  • 제코베 JS 100제

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/백준

백준 / 정렬 / 8979번 / 올림픽 / JS

2023. 12. 13. 17:46

< 문제 바로가기 >

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

 

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

const [N, K] = input.shift().split(' ').map(Number);
const infoList = input.map(row => row.split(' ').map(Number));

const solution = () => {
  // 조건에 맞게 정렬한다.
  infoList.sort((a, b) => {
    const country1 = { gold: a[1], silver: a[2], bronze: a[3] };
    const country2 = { gold: b[1], silver: b[2], bronze: b[3] };

    if(country1.gold !== country2.gold) {
      return country2.gold - country1.gold;
    }
    if(country1.silver !== country2.silver) {
      return country2.silver - country1.silver;
    }
    return country2.bronze - country1.bronze;
  });

  let rank = 1;

  // 만약 K가 정렬된 리스트의 첫번째 나라라면, 1등을 출력하고 바로 끝낸다.
  if(infoList[0][0] === K) {
    console.log(rank);
    return;
  }

  for(let i=1; i<N; i++) {
    const [prevCountry, prevGold, prevSilver, prevBronze] = infoList[i-1];
    const [curCountry, curGold, curSilver, curBronze] = infoList[i];

    // 전 인덱스의 나라의 메달 개수가 현재 인덱스의 나라의 메달 개수보다 많으면,
    // 순위를 (현재 인덱스 + 1)로 해준다.
    // (현재 인덱스 + 1)로 해주는 이유는, 공동 2등이 있을 경우, 그 다음은 3등이 아니라 4등이기 때문이다.
    if(prevGold > curGold) rank = i + 1;
    else if(prevSilver > curSilver) rank = i + 1;
    else if(prevBronze > curBronze) rank = i + 1;

    // 현재 인덱스의 나라가 구하려는 나라라면, 순위를 출력해주고 끝낸다.
    if(curCountry === K) {
      console.log(rank);
      break;
    }

    // 만약 전의 인덱스의 나라와 메달 개수가 같다면,
    // 같은 순위이므로 rank를 더해주지 않고 다음 반복으로 넘어간다.
  }
};

solution();
저작자표시 (새창열림)

'PS > 백준' 카테고리의 다른 글

백준 / 그래프 / 1697번 / 숨바꼭질 / JS  (0) 2023.12.19
백준 / 그래프 / 14226번 / 이모티콘 / JS  (0) 2023.12.18
백준 / 백트래킹 / 18428번 / 감시 피하기 / JS  (2) 2023.12.12
백준 / 그래프 / 17086번 / 아기 상어 2 / JS  (0) 2023.12.11
    'PS/백준' 카테고리의 다른 글
    • 백준 / 그래프 / 1697번 / 숨바꼭질 / JS
    • 백준 / 그래프 / 14226번 / 이모티콘 / JS
    • 백준 / 백트래킹 / 18428번 / 감시 피하기 / JS
    • 백준 / 그래프 / 17086번 / 아기 상어 2 / JS
    KimMinJun
    KimMinJun

    티스토리툴바