[코테] 특이한 정렬

강원지·2023년 1월 19일
0

코테 다시보기

목록 보기
2/22

코딩테스트 연습
코딩테스트 입문
특이한 정렬

문제

numlist에서 n가 가까운 거리에 있는 순서대로 정렬하여 반환함. 단, 같은 거리에 있다면 크기가 큰 숫자가 먼저 와야함.

로직

0. n과의 차를 Map에 저장함(object에서는 key 값으로 사용할 수 없었던 number와 같은 원시타입도 사용가능하다.).
1. map의 key값으로 내림차순 정렬
2. map의 value값으로 오름차순 정렬

차를 저장하지 않고 sort함수로 차에 따라 numlist를 바로바로 정렬함.

중요개념

sort()함수는 유니코드 순서에 따라 정렬하기 때문에 [1,2,11,3]가 [1,11,2,3]으로 정렬됨. 숫자 비교는 함수를 사용해야 함.

//a,b 크기 비교
arr.sort(function(a, b)  {
  if(a > b) return 1;
  if(a === b) return 0;
  if(a < b) return -1;
});
//key 값 정렬
  str.sort((a, b) => a[0] - b[0]).reverse();//[0]는 value
//value 값 정렬
  str.sort((a, b) => a[1] - b[1]); // [1]은 key

코드

function solution(numlist, n) {

  numlist.sort((a, b) => b - a);
  numlist.sort(function (a, b) {
    return Math.abs(a - n) - Math.abs(b - n);
  });
  return numlist;
}

Map과 Object의 차이

0개의 댓글