等号を求める


  • 講師解答
  • 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);