정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ n ≤ 10,000
1 ≤ numlist의 원소 ≤ 10,000
1 ≤ numlist의 길이 ≤ 100
numlist는 중복된 원소를 갖지 않습니다.
입출력 예
numlist | n | result |
---|---|---|
[1, 2, 3, 4, 5, 6] | 4 | [4, 5, 3, 6, 2, 1] |
[10000,20,36,47,40,6,10,7000] | 30 | [36, 40, 20, 47, 10, 6, 7000, 10000] |
function solution(numlist, n) {
numlist.sort((a,b)=>b-a)
let obj = {}
const sub = numlist.map(el => Math.abs(el-n))
const subM100 = sub.map(el => el*100)
for(let i=0; i<subM100.length; i++){
obj[subM100[i]+i] = 0
}
const index = Object.keys(obj).map(el=>el%100)
let answer = []
for(let i=0; i<index.length; i++){
answer.push(numlist[index[i]])
}
return answer
}
우선 n으로부터의 거리가 동일한 경우 더 큰 수를 배치해야 하므로 numlist를 오름차순으로 정렬한다
numlist.sort((a,b)=>b-a)
n으로 부터의 거리
의 집합을 배열sub라 하고
const sub = numlist.map(el => Math.abs(el-n))
n으로 부터의 거리
와 인덱스
를 객체 obj에 키로 넣어줄 것이다
obj에 삽입된 키들은 자동으로 오름차순 정렬된다
let obj = {}
const sub = numlist.map(el => Math.abs(el-n))
const subM100 = sub.map(el => el*100)
for(let i=0; i<subM100.length; i++){
obj[subM100[i]+i] = 0
}
obj의 키를 뽑아 n으로 부터의 거리의 인덱스
만 매핑한 배열을 index
라 하고
const index = Object.keys(obj).map(el=>el%100)
index
의 값을 index로 하는 numlist
의 값을 차례로 빈배열 answer
에 삽입하고 순회가 종료되면answer
를 반환한다
let answer = []
for(let i=0; i<index.length; i++){
answer.push(numlist[index[i]])
}
return answer
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}