문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
입출력 예
input: [sun, bed, car], 1
output: [car, bed, sun]
이번 문제는 sort()를 이용해서 풀어야한다.
sort는 매개변수를 생략하면 배열은 각 요소에 오름차순으로 정렬된다. 그러나 이 문제는 각 요소의 n번째 글자를 기준으로 정렬하므로 매개변수인 함수를 만들어준다.
매개변수인 함수 compare(a,b)에서
positive인 함수를 return하면 b를 a보다 낮은 인덱스로 소트하고,
negative인 함수를 return하면 a를 b보다 낮은 인덱스로 소트한다.
(0을 리턴하면 변경하지 않는다.)
function solution(strings, n) {
return strings.sort((a, b) => {
if(a[n] > b[n]) return 1;
if(a[n] < b[n]) return -1;
if(a[n] === b[n]){
if(a > b) return 1;
if(a < b) return -1;
return 0;
}
})
}
localCompare()를 활용할 수 있다.
//localCompare()의 예시
'a'.localeCompare('c'); // -2 or -1 (or some other negative value)
'check'.localeCompare('against'); // 2 or 1 (or some other positive value)
'a'.localeCompare('a'); // 0
function solution(strings, n) {
return strings.sort((a, b) => a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n]));
}