등수구하기

WooBuntu·2021년 2월 16일
0

JS 90제

목록 보기
6/33
  • 강사님 풀이
function solution(arr) {
  let n = arr.length;
  let answer = Array.from({ length: n }, () => 1);
  console.log(answer);
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      if (arr[j] > arr[i]) answer[i]++;
    }
  }
  return answer;
}
// 장점 : 코드가 짧고 논리가 명확함
// (=나보다 점수 높은 애가 있으면 내 등수가 1씩 밀려난다)
// 단점 : 중첩반복문 -> 시간복잡도 높음

let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));
  • 내 풀이
const solution = (...rest) => {
  rest = rest
    .map((v, i) => ({
      v,
      i,
    }))
    .sort((a, b) => (a.v > b.v ? -1 : 1));
  rest[0].rank = 1;
  let rank = 1;
  for (let i = 1; i < rest.length; i++) {
    if (rest[i].v == rest[i - 1].v) {
      rank++;
      rest[i].rank = rest[i - 1].rank;
    } else {
      rest[i].rank = ++rank;
    }
  }
  console.log(rest);
  return rest.sort((a, b) => (a.i > b.i ? 1 : -1)).map(a => a.rank);
};
// 장점 : 반복문의 계층이 하나기 때문에 시간 복잡도가 낮음
// 단점 : 코드가 길고 이런 식으로는 복잡한 논리를 구성할 때 실수가 발생할 수 있음

const result = solution(87, 92, 92, 100, 100);
console.log(result);

0개의 댓글