function solution(strings, n) {
return strings.sort((a, b) => {
// n번째 글자가 다르면 n번째 글자를 기준으로 정렬
if (a[n] !== b[n]) {
return a[n].localeCompare(b[n]);
}
// n번째 글자가 같으면 전체 문자열을 기준으로 정렬
return a.localeCompare(b);
});
}
이번문제에서도 localeCompare() 라는 메서드를 새로 알게 되었다.
referenceStr가 compareString 전 혹은 뒤에 오는지 또는 동등한지를 나타내는 정수를 반환합니다.
compareString 전에 referenceStr이 오면 음수
compareString 뒤에 referenceStr이 오면 양수
동등한 경우 0 을 반환합니다.
위에 mdn 문서를 봐도 이해하기 어려웠다. 또 보다 보니 sort() 메서드의 원리가 뭔지 제대로 모르겠어서 더 찾아봤다.
위에 문제를 토대로 다시 설명해보자.
1. sort 함수가 하는 일
sort 함수는 배열에 있는 두 개의 요소를 비교하면서 순서를 바꿔 배열을 오름차순이나 내림차순으로 정렬한다.
- a와 b는 배열에서 서로 비교되는 두 개의 요소를 나타낸다.
- 예를 들어 배열이 ["sun", "bed", "car"]라면 sort는 먼저 "sun"과 "bed"를 비교하고, 다음에는 "bed"와 "car"를 비교하는 식이다.
2. sort 함수의 원리
sort 함수는 두 요소를 비교하고, 그 비교 결과를 통해 배열 요소의 위치를 정한다.
- a - b: 숫자를 정렬할 때 많이 쓰는데, a가 b보다 작으면 음수가 나와서 오름차순이 된다. (작은 수가 앞에 오도록)
- 문자열을 정렬할 때는 localeCompare라는 방법을 사용한다. 이 함수는 문자 간의 사전 순서를 비교한다.
3. 예시를 통한 설명
지금 문제에서는 배열 ["sun", "bed", "car"]와 n = 1을 주었으니, 각 단어의 인덱스 1에 있는 글자를 기준으로 정렬해야 한다.
이제 sort가 배열의 요소들을 하나씩 두 개씩 짝지어 비교해 나가는 과정을 보면,
- "sun"과 "bed"를 비교한다.
- n = 1이니까, "sun"의 인덱스 1 글자는 "u", "bed"의 인덱스 1 글자는 "e".
- "e"가 "u"보다 앞에 있어야 하므로 "bed"가 "sun"보다 앞에 오게 한다.
- "bed"와 "car"를 비교한다.
- "bed"의 인덱스 1 글자는 "e", "car"의 인덱스 1 글자는 "a".
- "a"가 "e"보다 앞에 있어야 하니까 "car"가 "bed"보다 앞에 오게 한다.
- "sun"과 "car"를 비교.
- 이제 "sun"과 "car"도 비교해서 "car"가 더 앞에 오도록 정렬한다.
최종 결과
이 과정을 통해 ["car", "bed", "sun"]이 되며, 각 단어의 인덱스 1 문자 기준으로 오름차순 정렬된 배열을 얻게 된다.
'JavaScript' 카테고리의 다른 글
[프로그래머스 Lv.1] 콜라문제 javascript (0) | 2024.11.12 |
---|---|
[프로그래머스 Lv.1] k번째 수 (0) | 2024.11.08 |
[프로그래머스 Lv.1] 가장 가까운 같은 숫자 javascript (0) | 2024.11.05 |
[프로그래머스 Lv.1] 숫자 문자열과 영단어 (0) | 2024.11.04 |
[프로그래머스 Lv.1] 시저 암호/두개 뽑아서 더하기 javascript (0) | 2024.11.01 |