▶sort() 함수를 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 원소 ≤ 10,000
- 1 ≤ numlist의 길이 ≤ 100
- numlist는 중복된 원소를 갖지 않습니다.
입출력 예 & 설명
입출력 예 #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이 앞에 와야 합니다.
나의 풀이
어떻게 풀지 감이 안 잡혀서 결국 구글링을 해서 도움을 받았습니다.
제가 이해한 코드에 대해서 설명해보고자 합니다.
먼저 이 코드를 이해하기 위해서는 sort() 함수에 대해서 자세히 알아야 합니다.
sort() 함수에서 숫자를 정렬해야 할 때 정렬 기준을 나타내는 콜백 함수를 받습니다. 이때 첫 번째 인자가 두 번째 인자보다 작으면 (a < b) 음수를 반환하고, 첫 번째 인자가 두 번째 인자보다 크면 (a > b) 양수를 반환합니다.
✅ 양수일 때는 자리를 바꾸고, 음수일 때는 자리를 바꾸지 않습니다.
즉 음수면 a가 먼저 나오고 양수면 b가 먼저 나옵니다.
numlist의 요소의 길이를 Math.abs() 메서드를 사용해서 n과의 차이를 구합니다.
근데 여기서 주의해야 할 점은 요소와 n과의 차이가 같을 때는 더 큰 요소가 앞에 와야 한다는 점인데 이 포인트를
sort() 함수의 반환값으로 구분을 해야 합니다.
문제의 테스트 1의 입력값을 예로 들자면 n과 배열 요소의 차이가 같은 요소는 3과 5 그리고 6과 2입니다.
그러면
a: 5 , b: 3이 되는데 5가 앞으로 와야 하기 때문에 양수(1)를 반환합니다.
a: 6 , b: 2이 되는데 6가 앞으로 와야 하기 때문에 양수(1)를 반환합니다.
그리고 절댓값을 기준으로 차이가 큰 값이 뒤로 가야 합니다. 즉 오름차순으로 정렬하여 마무리했습니다.
다른 풀이
"나의 풀이"와 같은 맥락으로 Math.abs() 사용해서 차이가 더 적은 게 앞에 위치하도록 오름차순으로 정렬하고 만약 차이가 같은 상황이라면 0이 되므로 ▶JS에서 false로 간주되는 것 포스팅을 보면 Js에서는 0을 false로 간주하기 때문에 or(||) 뒤의 연산을 수행하게 됩니다.
그러면 위에서 설명했듯이 b가 먼저 나와야하기 때문에 내림차순(b-a)으로 연산을 수행해 줍니다.
참고 ❗
[JavaScript] 정렬 함수 sort() 함수와 toSorted() 함수 알아보기
let numbers = [1, 20, 2, 30, 3, 40, 5, 4]; numbers.sort(); console.log(numbers); // 결과 : [1, 2, 20, 3, 30, 4, 40, 5] sort() 배열.sort([compareFunction]); let alp = ['A', 'C', 'D', 'B', 'E', 'G']; alp.sort() console.log(alp); // 결과 : ['A', 'B', 'C
pixx.tistory.com
[JavaScript] JavaScript에서 true &false로 간주되는 것 (boolean)
프로그래밍에서는 다음과 같은 두 값 중 하나만 가질 수 있는 데이터 유형이 필요한 경우가 매우 많습니다. YES / NO (예 / 아니오) ON / OFF (켜기 / 끄기) TRUE / FALSE (참 / 거짓) JavaScript에서 boolean 타입
pixx.tistory.com
'Coding Test > 프로그래머스' 카테고리의 다른 글
[SQL] 조건에 맞는 도서 리스트 출력하기 (ORACLE) (0) | 2024.04.21 |
---|---|
[프로그래머스] 평행 (JavaScript) (0) | 2024.03.13 |
[프로그래머스] 안전지대 (JavaScript) (0) | 2024.03.11 |
[프로그래머스] 유한소수 판별하기 (JavaScript); (0) | 2024.03.09 |
[프로그래머스] 다항식 더하기 (JavaScript) (0) | 2024.03.07 |