[프로그래머스] "문자열 내 마음대로 정렬하기": JS - localeCompare, sort함수

신혜린·2023년 4월 28일
0

알고리즘(javascript)

목록 보기
12/21
post-thumbnail
  • 프로그래머스 lv.1 문자열 내 마음대로 정렬하기 풀이 중
    참고자료|mdn web docs

function solution(strings, n) {
    // strings 배열
    // n 번째 문자열 비교
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

이 코드를 보고 처음보는 함수 localeCompare에 대해 배웠다. 그리고 sort() 활용법도 배웠다.


localeCompare()

localeCompare 함수는 참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지, 혹은 동일한 문자열인지 나타내는 수치를 반환하는 메소드이다.

예시

// "a"는 "c" 전에 위치하므로 음수 값을 반환
'a'.localeCompare('c'); // -2 혹은 -1 (또는 다른 음수 값)

// 알파벳 순으로 단어 "check"는 "against"보다 뒤에 위치하므로 양수 값을 반환
'check'.localeCompare('against'); // 2 혹은 1 (또는 다른 양수 값)

// "a"와 "a"는 서로 동등하므로 중립 값 0을 반환
'a'.localeCompare('a'); // 0

근데 음수, 양수, 0을 반환하는 것과 'sort'의 상관관계는 무엇인지 바로 떠오르지 않았다. 찾아보니 다음과 같은 관계가 있었다.

sort()

sort 함수를 이용해서 배열 내림차순 및 오름차순 정렬을 할 수 있다는 것을 배웠다.
다음은 내가 여태껏 썼던 메소드 방식이다.

// 오름차순 정렬
const array = [1,3,11,2,6,22];
array.sort((a,b) => a-b);
console.log(array); // [1,2,3,6,11,22]

// 내림차순 정렬
const array = [1,3,11,2,6,22];
array.sort((a,b) => b-a);
console.log(array); // [22,11,6,3,2,1]

-> 위와 같이 a-b 혹은 b-a의 값이 무엇이냐에 따라 오름차순/내림차순으로 정렬을 할 수가 있다

📌 a-b의 값이

  • 양수인 경우: a를 앞으로
  • 0인 경우: 그대로
  • 음수인 경우: b를 앞으로

그렇기 때문에 위에 localeCompare음수 혹은 양수 중 어떤 값을 반환하냐에 따라 sort 함수가 작동하는 원리인 것이다!! 넘나 신기하다!!

profile
개 발자국 🐾

0개의 댓글