728x90
# 문제
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
# 답안
// 1. 입력: 정수배열 numlist, 정수 n
// 2. 출력: numlist를 n으로부터 가장 가까운 순서로 정렬한 배열
// 기본적으로 (numlist요소 - n)을 뺀 절대값들을 오름차순 정렬 (가까운 순서로 정렬)할건데,
// 거리가 같으면, 즉 (numlist요소 - n)이 0인 경우에는 내림차순 정렬 (큰 순서 정렬)
function solution(numlist, n) {
return numlist.sort((a,b)=> Math.abs(a-n) - Math.abs(b-n) || b - a);
}
# 인사이트
function solution(numlist, n) {
return numlist
.sort((a, b) =>
// (a - b)이기 때문에 오름차순으로 정렬한다.
// 각 요소에서 n을 뺀 절대값을 기준으로 오름차순으로 정렬
Math.abs(a - n) - Math.abs(b - n) ||
// or을 썼기 때문에 앞의 비교문이 0이면
// 즉, 두 요소가 n과의 거리가 같다면 두 요소끼리 비교해서
// 내림차순(b - a)으로 정렬한다.
b - a
);
}
or 연산자는 앞에 위치한 피연산자의 불린값을 따져서 false가 나오는 경우에만 다음 피연산자로 넘어가고 true일 경우 연산을 멈추고 원래 값을 반환한다.
따라서 이 코드에서는 Math.abs(a - n) - Math.abs(b - n) 에서 값이 0(불린 값 판정으로 false)이 나오기 전까진 앞의 로직만 실행되므로 절대값의 차이가 나는 경우 내림차순 정렬,
절대값 차이가 나지 않는 같은 값일 경우에는 기존값을 기준으로 비교(b-a)하여 오름차순 정렬이 실행된다.
참고하면 좋은 게시글
728x90
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 86 - OX퀴즈 ) (0) | 2024.04.24 |
---|---|
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 85 - 최빈값 구하기) (0) | 2024.04.24 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 83 - 문자열 밀기) (0) | 2024.04.24 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 82 - 저주의 숫자 3) (0) | 2024.04.23 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 81 - 치킨 쿠폰) (0) | 2024.04.23 |