https://school.programmers.co.kr/learn/courses/30/lessons/120880
[ 문제 설명 ]
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n 으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
[ 문제 풀이 ]
첫번째 풀이
function solution(numlist, n) {
const obj = {};
numlist.forEach((item) => {
obj[item] = Math.abs(item - n);
});
return Object.keys(obj)
.sort((a, b) => {
if (obj[a] === obj[b]) {
return b - a;
} else {
return obj[a] - obj[b];
}
})
.map((item) => parseInt(item));
}
1. const obj = {}; : 빈 객체 obj 생성
2. numlist.forEach((item) => { obj[item] = Math.abs(item - n);});
key는 numlist 배열의 원소(item)로, value는 item과 n의 차이의 절댓값으로 설정
3. Object.keys(obj) : obj 객체의 모든 key 값을 배열로 추출
4. if (obj[a] === obj[b]) : value값이 동일하면 더 큰 key 값이 먼저 오도록
5. map((item) => parseInt(item)) : 정렬된 key값을 숫자로 변환하여 배열로 반환
두번째 풀이
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
|| b - a는 만약 두 원소의 차이의 절댓값이 같다면, 원소의 크기를 비교하여 더 큰 원소가 앞으로 정렬되도록 합니다.
'프론트엔드로 가는 길 > 프로그래머스' 카테고리의 다른 글
47. 캐릭터의 좌표 (0) | 2023.04.24 |
---|---|
46. 로그인 성공 (1) | 2023.04.21 |
44. 문자열밀기 (1) | 2023.04.19 |
43.등수매기기 (0) | 2023.04.19 |
42. 치킨 쿠폰 (1) | 2023.04.17 |