본문 바로가기

CS/알고리즘

[230321] 특이한 정렬

반응형

 

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

🧸 sort()는 배열 주소를 참조하여 수정하므로, 원본 데이터를 수정한다는 사실을 주의하자!

 

내 풀이

  1. -k 더하고 절댓값인 배열 생성 = numArray
  2. numlist의 각 숫자를
    1. -k 더함 = x
    2. x < 0 면 numArray에 -x가 있는지 확인
    3. 있으면 +0.5 하기 (꼭 0.5가 아니어도 됨. 0.1이어도 된다. 후에 확인용으로 더하는 것임)
  3. numPointArray를 정렬함 =sortedNumArray
  4. sortedNumArray에 각 숫자를 보고
    1. 정수면 +n
    2. 정수가 아니면 -num +n+0.5
function solution(numlist, n) {
	const numArray = numlist.map(num => Math.abs(num - n));
  
  const numPointArray = numlist.map(num => {
      const x = num - n;
      if(x < 0 && numArray.includes(-x)) return -x + 0.5;
      return x;
  })
  
  const sortedNumArray = numPointArray.sort((x, y) => x - y); 
  return sortedNumArray.map(num => {  
      if(num === parseInt(num)) return num + n;
      return -num + n + 0.5;
  })
}

 

 

다른 풀이

function solution(numlist, n) {
  return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
반응형