sort 문제를 풀어보며 localeCompare() 메서드를 알게되어 정리해본다.
입력값을 받아 문자열의 길이가 작은 순으로 출력하는 문제를 풀었다.
만약 문자열의 길이가 같다면 사전순으로 정렬하면된다.
sort를 이용하면서 풀면되겠다고 생각했고 그의 생각한 코드는 이렇다.
const fs = require('fs');
const input = fs.readFileSync(0).toString().trim().split('\n');
let wordLength = parseInt(input[0]);
let arr = [];
for(let i = 1; i <= wordLength; i++){
arr.push(input[i])
}
arr = arr.sort((a, b) => return a.length - b.length).join('\n')
console.log(arr)
작성한 코드의 틀린점이 존재했다. 테스트케이스에서 문제가 틀렸다고 나왔다.
문자열이 같을때, 사전순으로 제대로 배치가 되질 않았다.
찾아보니 localeCompare()
메서드를 찾을 수 있었다.
localeCompare()
문자열을 비교해 정렬 순서에 따라 문자열의 앞에오는지, 뒤에오는지 또는 동일한지 여부를 숫자로 반환하게 해준다.
const a = 'a';
const b = 'b';
console.log(a.localeCompare(b)); // -1
console.log(b.localeCompare(a)); // 1
위처럼 a가 b와 비교할때 a가 앞에있다면 -1
뒤에 있다면 1
을 반환한다.
이걸 sort
와 같이 이용해 볼 수 있다.
const fs = require('fs');
const input = fs.readFileSync(0).toString().trim().split('\n');
let wordLength = parseInt(input[0]);
let arr = [];
for(let i = 1; i <= wordLength; i++){
arr.push(input[i])
}
arr = arr.sort((a, b) => {
if(a.length === b.length){
return a.localeCompare(b)
}
return a.length - b.length
}).join('\n')
console.log(arr)
길이가 같을 때 비교하여 sort
는 -1
이 앞에서부터 정렬되기 때문에 이렇게 사용하게 되면
사전순으로 정렬이 가능하게 된다.
가끔 코드트리
라는 곳에서 문제도 풀어보고 있는데 테스트 케이스에서 내가 어떤 부분이 틀렸는데 명확하게 보이기 때문에 좀 더 수월하게 고민하고 풀 수 있었던 것 같다.
localeCompare
메서드에 대해서는 오늘 알았다. 참 다양한 메서드가 존재하니
이걸 다 외우진 못하지만 어떤 상황에서 사용해야 할지는 알았던 시간이였다.