https://school.programmers.co.kr/learn/courses/30/lessons/120880
문제 설명
정수 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] |
입출력 예 설명
입출력 예 #1
- 4에서 가까운 순으로 [4, 5, 3, 6, 2, 1]을 return합니다.
- 3과 5는 거리가 같으므로 더 큰 5가 앞에 와야 합니다.
- 2와 6은 거리가 같으므로 더 큰 6이 앞에 와야 합니다.
입출력 예 #2
- 30에서 가까운 순으로 [36, 40, 20, 47, 10, 6, 7000, 10000]을 return합니다.
- 20과 40은 거리가 같으므로 더 큰 40이 앞에 와야 합니다.
나의 풀이
주어진 numlist를 맵핑을 해준뒤 n에서 뺀값을 numbers 맵에 저장을 해주었습니다.
그리고 다시 배열로 만들어준뒤 sort()를 해주고 나열된 값을 mapping으로 뽑아온뒤 answer로 리턴을 해주었습니다.
function solution(numlist, n) {
let numbers = new Map();
numlist.forEach(item => numbers.set(item,0));
for (let i = 0; i < numlist.length; i++) {
numbers.set(numlist[i], Math.abs(numlist[i] - n));
}
const mapToNumbers = [...numbers];
mapToNumbers.sort((a,b) => b[0] - a[0]);
mapToNumbers.sort((a,b) => a[1] - b[1]);
let answer = mapToNumbers.map((number) => number[0]);
return answer;
}
다른 풀이
나의 풀이에 비해 훨신 간결하고 효율적이다.
주어진 숫자를 먼제 sort해준뒤 빼면 n과의 차이가 자동적으로 나열이 된다는것을 깨달았다.
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
'코딩 문제 > 프로그래머스 [ JavaScript ]' 카테고리의 다른 글
[ 프로그래머스 / JavaScript ] 짝지어 제거하기 (0) | 2022.10.23 |
---|---|
[ 프로그래머스 / JavaScript ] 다음에 올 숫자 (1) | 2022.10.22 |
[ 프로그래머스 / JavaScript ] [ 2022 KAKAO TECH INTERNSHIP ] 성격 유형 검사하기 (0) | 2022.10.20 |
[ 프로그래머스 / JavaScript ] 안전지대 (0) | 2022.10.19 |
[ 프로그래머스 / JavaScript ] 옹알이 (0) | 2022.10.17 |
댓글