문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.
입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.
해당 문제는 2가지 방식으로 풀이가 가능하다.
localeCompare()
를 이용한 기준 정렬하기 sorting()
의 기본원리를 이용하기 localCompare
해당 메서드는 기준 문자열과 비교했을 때 비교 대상 문자열이 정렬상 전에 오는지, 후에 오는지 같은 순서에 배치되는지를 알려주는 숫자를 리턴한다.
String.prototype.localeCompare
referenceStr.localeCompare(compareString[, locales[, options]])
function solution(strings, n) {
return strings.sort((a, b) => a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n])); }
n번째 알파멧이 같으면, a와 b를 비교하고 그렇지 않을 경우 a[n]과 b[n]을 비교하여 숫자를 리턴한다.
sort()를 활용한 문제풀이
비교 함수는 배열 안에 인접한 요소를 비교하는 역할이다. 비교함수는 인수를 두개로 받는다. 첫 번째 인수는 인접한 왼쪽 요소이고, 두 번째 인수는 인접한 오른쪽 요소이다.
비교함수를 function(a,b)라고 했을 때 비교 함수는 다음 규칙을 따른다.
n번째 문자가 같을 때는 return (a > b) - (a < b);
매개변수로 받은 a,b 문자열 전체를 비교하면 해결할 수 있다.
function solution(strings, n) {
strings.sort((a,b) => {
const first = a[n];
const second = b[n];
if (first === second){
return (a > b) - (a < b);
} else {
return (first > second) - (first < second);
}
});
return strings;
}