[6,10,2] 이런 배열에서 자리만 바꿔서 만들 수 있는 최댓값 만드는 문제 보고 이거 sort로 풀면 되지 않나? 해서 찾아본것
정답은
numbers.sort((a,b) =>
{
return String(a)+Number(b) >String(b) + Number(a)
})
(정답보니까 ''+a+b 해도 똑같던데 뭔가 이해가 안가는 코드라서 그냥 무식하게 저렇게 씀)
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다 - by MDN
arr.sort([compareFunction])
- 여기에서 알 수 있듯이 그냥 .sort만 써도 됨 - 그렇게 되면 문자열의 유니코드대로 배열을 바꾼다음 그 배열을 반환해줌
- sort는 원 배열을 바꿔버림(복사본 아님)
- sort는 기본적으로 배열 요소를 String으로 취급함 - 이래서 따로 리턴값 안정해주면 앞자리만 보고 정렬해줌
- 단순히 a,b => a - b / b - a 이런것만 가능한 게 아니라 특정 조건값에 따른 리턴값을 지정해줘서도 사용 가능함
compareFunction이 제공되면 배열 요소는 compare 함수의 반환 값에 따라 정렬됩니다. a와 b가 비교되는 두 요소라면,
- compareFunction(a, b)이 0보다 작은 경우 a를 b보다 낮은 색인으로 정렬합니다. 즉, a가 먼저옵니다.
- compareFunction(a, b)이 0을 반환하면 a와 b를 서로에 대해 변경하지 않고 모든 다른 요소에 대해 정렬합니다. 참고 : ECMAscript 표준은 이러한 동작을 보장하지 않으므로 모든 브라우저(예 : Mozilla 버전은 적어도 2003 년 이후 버전 임)가 이를 존중하지는 않습니다.
- compareFunction(a, b)이 0보다 큰 경우, b를 a보다 낮은 인덱스로 소트합니다.
- compareFunction(a, b)은 요소 a와 b의 특정 쌍이 두 개의 인수로 주어질 때 항상 동일한 값을 반환해야합니다. 일치하지 않는 결과가 반환되면 정렬 순서는 정의되지 않습니다.
여기서 알아야될 것이 a,b가 index 0 1 이렇게 가는게 아니라 반대라고 생각하면 됨
arr.sort((그다음,현재)) 라고 생각하면 됨
저게 어떤 방식으로 계산이 이루어지나 찾아봤더니 굉~장히 복잡한 알고리즘으로 계산이 된다고 해서 세세하게 분석하는건 좀 무의미한거 같음..
보통 많이 쓰는게 arr.sort((a,b) => a-b or b-a)인데
예시의 경우 처음에 a = 2 b = 4 라는 값이 들어왔음 - 결과는 a- b<0이기 때문에 4와 2의 순서가 바뀌게 됨
배열은 [2,4,1,6]이 되었고 그 다음으로 a = 1 / b = 2 라는 값이 들어오게 되고 결과는 <0 - 순서가 또 바뀜
배열은 [1,4,2,6]이 되었고 그 다음으로 a = 6 / b = 1 비교했더니 이번엔 >0 - 아무것도 안바뀜
이런 원리때문에 a-b면 작은 값이 앞으로 올테니 오름차순이 되는거고
b-a면 큰 값이 앞에 올테니 내림차순이 됨
여기서 기억해야 될 점은 >0이면 안바뀌고 <0이면 바뀐다는 거
return 1이면 안바뀜 / -1이면 바뀜 이런식으로 세세하게도 가능
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic', value: 13 },
{ name: 'Zeros', value: 37 }
];
// value 기준으로 정렬
items.sort(function (a, b) {
if (a.value > b.value) {
return 1;
}
if (a.value < b.value) {
return -1;
}
// a must be equal to b
return 0;
});
'node.JS' 카테고리의 다른 글
puppeteer 라이브러리 - dialog (0) | 2023.05.30 |
---|---|
백준 2839 - 설탕배달 (0) | 2023.03.07 |
프로그래머스 lev2. 프린터 (0) | 2023.03.06 |
백준 1021 - 회전하는 큐 (0) | 2023.03.02 |
백준 2798 - 블랙잭 (0) | 2023.03.01 |