Algorithm JS | 프로그래머스 코딩테스트_특이한 정렬

앙두·2023년 5월 17일
0

Algorithm

목록 보기
6/17

📑 문제

  • 숫자 배열(numlist)의 원소들과 n의 숫자 차이(거리)
  • 숫자 차이가 적은 숫자부터 오름차순 정렬
  • numlist 는 중복된 원소를 갖지 않습니다.

🤓 나의 풀이

못 풀었는데요 ... 🥲
풀지 못하고 개판 5분전 된 코드를 일단 공개해보겠다 ...
못 푼 코드라 볼 필요는 없다 ^^!

function solution(numlist, n) {
    // numlist 의 원소가 n 과 가까운 것부터 정렬되어야 한다
    // numlist - n = 값이 작은 숫자가 먼저 정렬
  let newArr = [];
  for (let i = 0; i < numlist.length; i++) {
    newArr.push(Math.abs(n - numlist[i]))
    console.log(newArr)
    const el = Math.abs(n - numlist[i]);
    
    newArr.sort((prev, next) => {
      if(prev > next) return 1;
      if(prev === next) return 0;
      if(prev < next) return -1;
    })
    
    console.log(newArr)
  //   const prev = Math.abs(n - numlist[i]);
  //   const next = Math.abs(n - numlist[i+1]);
  //   // 절대값 기준으로 원소 오름차순
  //   numlist.sort((prev, next) => {
  //     if(prev > next) return 1;
  //     if(prev === next) return 0;
  //     if(prev < next) return -1;
  //   })
  }
}

Math.abs 로 절대값 만드는거랑, sort 사용해야 될 것 같은 건 감지를 했는데 거기서 어떻게 응용하여 해결해야할지는 모르겠어서 포기 ㅜ_ㅜ
sort()에 대한 이해력이 부족하다고 느낌 ... !
나는야 for문 밖에 몰르는 밥오 .... 🥳


👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

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

구글링하여 이 간결하고도 클린한 코드로 일단 제출을 했다. (무려 +10점!)
sort 메서드를 사용하여 각 요소마다 n을 빼주고,
sort 의 compareFunction 을 활용하여 오름차순으로 반환해주도록 한다.
그러나 뺀 값이 0이 되면(즉, falsy 한 값이 되면) 내림차순으로 계산되도록 한다.

진짜 군더더기없이 정확한 코드...!

sort()를 더 공부해야겠다 👩🏻‍💻

profile
쓸모있는 기술자

0개의 댓글