[코테] 등수 매기기

강원지·2023년 1월 19일

코테 다시보기

목록 보기
3/22

코딩테스트 연습
코딩테스트 입문
등수 매기기

문제

두 과목에 대한 배열이 주어지고 둘의 평균을 구해 등수를 매겨라.

로직

  1. 배열에 [평균, 저장 순서]를 저장하고
  2. 평균의 내림차순으로 정렬
  3. answer에 저장 순서에 따라 등수를 저장함
    (answer[save[i][1]]=order)

코드

function solution(score) {
  var answer = [];
  let save = [];
  for (let i = 0; i < score.length; i++) {
    save.push([(score[i][0] + score[i][1]) / 2, i]);
  }
  save.sort((a, b) => a[0] - b[0]).reverse();
  
  let order = 1;
  let cnt = 0;
  
  for (let i = 0; i < score.length; i++) {
    answer[save[i][1]] = order;
    if (i < score.length - 1 && save[i][0] === save[i + 1][0]) {
      cnt++;
      continue;
    }
    order += 1 + cnt;
    cnt = 0;
  }
  
  return answer;
}


let list = [
  [1, 3],
  [3, 1],
  [3, 1],
  [2, 3],
  [3, 2],
  [1, 2],
  [0, 0],
];

solution(list);

더 나은 풀이

function solution(score) {
  let avg = score.map((a) => (a[0] + a[1]) / 2);
  let sorted = avg.slice().sort((a, b) => b - a);
  //slice()를 통해 avg를 추출하여 만든 새로운 객체에 대해 sort를 적용함
  //let sorted =avg.sort((a, b) => b - a)는 avg와 sorted 모두 정렬된 값 저장됨
  return avg.map((elem) => sorted.indexOf(elem) + 1);
}

0개의 댓글