토이 13번

야 나 개 ·2021년 11월 29일
0

주간 문제아이돌 

목록 보기
11/17
post-thumbnail

문제

정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다.

주의사항
삽입정렬로 오름차순을 나열해야한다.

Advanced
insertionSort 함수의 두 번째 인자로 callback 함수를 받아서, 그 함수의 리턴값을 기준으로 요소들을 정렬해 보세요.

일반적인 문제풀이

const insertionSort = function (arr) {
let answer = arr
for(let i = 0; i < arr.length; i++){
  let tmp = arr[i];
  for(j = i - 1; j >=0; j--){
     if(arr[j] > tmp){
       arr[j+1] = arr[j]
     } else {
       break;
     }
  }
  arr[j+1] = tmp
} 

return answer;
 
};

초고수 문제풀이

const insertionSort = function (arr, transform = (item) => item) {
  let sorted = [arr[0]];
  for (let i = 1; i < arr.length; i++) {
    if (transform(arr[i]) >= transform(sorted[i - 1])) {
      sorted.push(arr[i]);
    } else {
      for (let j = 0; j < i; j++) {
        if (transform(arr[i]) <= transform(sorted[j])) {
          const left = sorted.slice(0, j);
          const right = sorted.slice(j);
          sorted = left.concat(arr[i], right);
          break;
        }
      }
    }
  }

  return sorted;
};
profile
야 나도 개발자 될 수 있어

0개의 댓글