치춘짱베리굿나이스

[백준] 2890 본문

카약

문제

상근이는 카약 대회를 개최했다. 대회는 전세계에 생중계되고, 위성이 경기장 전체를 촬영하고 있다. 상근이는 위성 사진을 바탕으로 실시간 순위를 계산하는 프로그램을 만들려고 한다.

위성 사진은 R행 C열이다. 모든 줄의 첫 번째 글자는 'S'이고 출발선을 의미한다. 또, 마지막 글자는 'F'이고 이것은 결승선을 의미한다. 대회에 참가한 팀은 총 9팀이고, 각 팀은 1부터 9까지 번호가 매겨져 있다. 카약은 항상 열에 대해 연속하는 세 칸을 차지하며, 카약 번호로 표시한다. 마지막으로 물은 '.'로 나타나 있다.

팀의 순위는 결승선으로부터 떨어진 거리로 측정한다. 가까울수록 순위가 높다. 만약, 두 팀이 결승선과 떨어진 거리가 같다면, 같은 등수이다.

입력

첫째 줄에 R과 C가 주어진다. 다음 R개 줄에는 '.', 'S', 'F', '1'~'9'로 이루어진 위성 지도가 주어진다. 한 줄에는 최대 한 개의 카약만 있고, 위성 사진에 있는 카약은 항상 9개이다. (10 ≤ R, C ≤ 50)

출력

출력은 총 9줄을 해야 한다. i번째 줄에는 i번 팀의 등수를 출력한다. (i=1~9)

풀이

const kayak = () => {
  const [_, ...arr] = require("fs")
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split("\n");
  const numbers = "123456789";
  let score = [];
  let ans = [];
  let rate = 1;
  for (let line of arr) {
    let cnt = 0;
    for (let i in line) {
      if (line[i] === ".") cnt++;
      else if (numbers.includes(line[i])) {
        score.push([Number(line[i]), cnt]);
        break;
      }
    }
  }
  score = score.sort((a, b) => b[1] - a[1]);
  ans.push([score[0][0], rate]);
  for (let i = 1; i < score.length; i++) {
    if (score[i][1] < score[i - 1][1]) rate++;
    ans.push([score[i][0], rate]);
  }
  ans = ans.sort((a, b) => a[0] - b[0]);
  for (a of ans) console.log(a[1]);
};

kayak();

반성회

정렬에 정렬을 해줘야 하는 문제

코드가 너무 지저분해서 이게 맞나 싶을정도

'Javascript + Typescript > 자바스크립트로 알고리즘풀기' 카테고리의 다른 글

[백준] 10815  (0) 2023.07.30
[백준] 2508  (0) 2023.07.28
[백준] 27889  (0) 2023.07.21
[백준] 5524  (0) 2023.07.20
[백준] 27433  (0) 2023.07.19
Comments