js 입문자인 나는 프로그래머스에서 알고리즘 문제를 풀던 중
js sort에 대한 이해가 부족하다는 것을 느꼈다.
기본적으로 js에서는 기본 방식인 arr.sort() 를 사용하면 문자열을 기준으로 정렬 해준다.
let arr = [1,2,10,5]
arr.sort(); // [1,10,2,5]로 정렬됨
위 코드를 보면 기본적인 sort를 적용할 시 10이 2보다 작은 수로 판별되는데,
이는 문자 기준으로 '10'이 '2'보다 작다고 판별되기 때문이다.
본 작성자는 아직 js 초보자이지만 이해한 내용을 적자면
let arr = [1,2,10,5] 라는 배열이 있다고 하자.
arr.sort((a,b) => a-b) 이 코드에서 a,b는 arr에 대한 매개변수이다.
a-b를 비교해서 음수가 나오면 a가 작고, 양수가 나오면 크다는 이야기.
a-b = 0 이 나오면 둘의 수는 똑같다.
a가 작으면 앞으로, a가 크면 뒤로 보내는 것이다.
let arr = [1,2,10,5] 인 경우 직접 비교
- a=1 , b=2이다. a-b는 -1로 음수가 나온다. 그럼 a=1 이 b=2보다 작다는 것이 판별되어 앞으로 움직인다. [1,2,10,5]
- a=2 , b= 10 => a-b는 -8로 음수가 나온다. 또 a가 작기 때문에 2가 앞으로 움직인다. [1,2,10,5]
- a=10 , b=5 => a-b 는 5 양수다. a가 크기 때문에 뒤로 보낸다. [1,2,5,10]
let arr = [1,2,10,5];
arr.sort((a,b)=> a-b); //[1,2,5,10] 으로 정렬
방식은 동일하다. b-a를 비교해서 음수가 나오면 b가 작다는 이야기이다.
하지만 순서의 차이가 있다. 위치를 (a,b)로 두었기 때문에 b보다 큰 a가 앞으로 움직인다.
let arr = [1,2,10,5];
arr.sort((a,b)=> b-a); //[10,5,2,1] 으로 정렬
아직 sort에 대해 완전히 이해한 것도 아니고, 제대로 이해했는지 모르겠지만 열심히 공부하자.
위 글에서 틀린 내용이 있다면 훈수 감사히 받겠습니다. 감사합니다.