아주 간단한 문제를 풀다가 sort에 대해서 몰랐던게 있어서 정리하게 되었다.
js에서 sort함수는 유니코드를 기준으로 진행되기 때문에 숫자를 정렬할 때 단순히 크기순으로 정렬되지 않는다.
따라서 sort에 인자로 (a,b) => a - b 를 넣어주는데 자세한건 아래를 참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
Array.prototype.sort() - JavaScript | MDN
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.
developer.mozilla.org
(예시)
function solution(array, commands) {
var answer = [];
let cpyarr = [];
for(let i=0; i<commands.length; i++){
cpyarr = array.slice(commands[i][0]-1, commands[i][1]);
cpyarr.sort((a, b) => a - b);
answer.push(cpyarr[commands[i][2]-1]);
}
return answer;
}
sort의 내부 함수의 반환 값이 0보다 작으면 a가 b보다 작은 것으로 판단하여 오름차순으로 정렬된다.
0이 반환되면 순서를 바꾸지 않으며,
0보다 큰 값이 반환되면 b가 a보다 먼저 오도록 정렬됩니다.
(중요) 화살표 함수는 ()=> 뒤에 {} 중괄호가 와서 ()=>{} 형태가 되는 경우 중괄호 안의 코드를 단순히 '실행하는' 역할을 한다. 따라서 중괄호 내부에 return 을 써줘야만 반환값이 존재하는 함수가 된다.
그런데 ()=> 이후에 () 소괄호를 써주거나 아무 괄호도 써주지 않으면 return 코드 없이 해당 값을 '반환'하게 된다.
이를 통해 (a, b) => (b-a) 로 내림차순 정렬을 하거나,
(a-b) => (a-b) 후 결과 배열에 .reverse() 를 사용해서 내림차순 정렬을 해줄수도 있다.
(추가) 특이한건 비교할 떄 a와 b인자에서 index 순서상 a가 뒤의 숫자, b가 앞의 숫자가 온다는 것.
'알고리즘 문제풀이' 카테고리의 다른 글
D-3 (0) | 2024.05.16 |
---|---|
백트래킹이란? 최대 상금 문제 (0) | 2024.05.15 |
JS로 알고리즘 (0) | 2024.02.02 |
프로그래머스 [주식가격] 문제 스택으로 풀기 (0) | 2024.01.19 |
구조체 정렬 (sort함수 정렬 조건 custom하기) / map to vector (0) | 2024.01.17 |