Link
초보 개발자의 성장 일기
특이한 정렬, 매개변수와 가까운 순서대로 정렬 본문
문제 설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
나의 문제 해결 방법
배열의 첫번째부터 마지막까지 반복문을 돌려서 n과 빼기 연산을 했을 때 절대값이 가장 작은 순서대로 배열을 정렬한다.(거품정렬) 그리고 만약 절대값이 같을경우 뒷 숫자가 클 때 앞 배열과 위치를 바꾼다.
function solution(numlist, n) {
let temp = 0;
for (let i = 0; i < numlist.length - 1; i++) {
for (let j = 0; j < numlist.length - 1 -i; j++) {
if (Math.abs(n - numlist[j]) > Math.abs(n - numlist[j + 1])) {
temp = numlist[j];
numlist[j] = numlist[j + 1];
numlist[j + 1] = temp;
} else if((Math.abs(n - numlist[j]) === Math.abs(n - numlist[j + 1]))) {
if(numlist[j] < numlist[j + 1]) {
temp = numlist[j];
numlist[j] = numlist[j + 1];
numlist[j + 1] = temp;
}
}
}
}
return numlist;
}
다른 해결 방법
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
자바스크립트의 sort()는 음수를 반환하면 a가 먼저, 양수면 b가 순서가 먼저 되도록 짜여져 있다. b랑 a의 거리가 같은 상황 즉 Math.abs(a - n) - Math.abs(b - n)이게 0이 되는 상황이 되면 ||연산자 뒤가 실행되면서 같은 거리일 경우 큰 수를 먼저 나오도록 반환한다. 내가 코드를 짰을 때는 매우 긴 코드였는데 한줄로 끝낼 수 있다는게 허무하기도 했지만 더 열심히 공부해서 짧고 간단하게 로직을 짤 수 있도록 연구를 많이 해야 겠다.
'Development > Algorithm' 카테고리의 다른 글
가까운 수, 배열에서 가장 가까운 수 찾기 (0) | 2023.11.22 |
---|---|
연속된 수의 합 (2) | 2023.11.22 |
유한소수 판별하기 (0) | 2023.11.21 |
치킨 쿠폰 (0) | 2023.11.21 |
등수 매기기, 배열 변경 없이 sort()로 배열 정렬 (1) | 2023.11.20 |