문자열 내마음대로 정렬하기

Judo·2021년 1월 11일
0
post-custom-banner


function solution(strings, n) {
    /*
        strings[n]을 비교 => 유니코드로 비교 
        a < b => a가 앞에 
        b > a => b가 앞에 
        a === b => 문자열 자체를 비교 
    */
    let length = strings.length;
    for (let i = 0; i < length - 1; i++) {
        for (let j = 0; j < length - 1 - i; j++) {
            if (strings[j][n] > strings[j + 1][n]) {
                let temp = strings[j];
                strings[j] = strings[j + 1];
                strings[j + 1] = temp;
            } else if (strings[j][n] === strings[j + 1][n]) {
                if (strings[j] > strings[j + 1]) {
                     let temp = strings[j];
                     strings[j] = strings[j + 1];
                     strings[j + 1] = temp;
                }
            }
        }
    }
    return strings;
}
// 다른 분이 푼 코드 
function solution(strings, n) {
  
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
    
    var answer = [];
    return strings;
}
  • str.localeCompare(str2)는 기준 문자열이 비교 대상 문자열보다 앞에 온다면 음수를 리턴, 반대인 경우 양수 리턴, 같은 경우 0을 리턴하는 점을 이용해 문제를 풀었다. 물론 sort까지 이용. sort는 sort의 콜백함수는 compareFunction(a, b)이 음수를 리턴하면 a를 작은 값으로, 양수를 리턴하면 b를 작은 값으로, 0을 반환하면 따로 수정하지 않는다.
  • 위 코드의 경우 s1[n] 과 s2[n]이 같은 경우는 s1, s2를 비교해야 하므로 s1.localeCompare(s2)을 사용했고 s1[n] 과 s2[n]이 다른 경우는 s1[n].localeCompare(s2[n])을 비교한다. 리턴되는 값은 음수, 양수, 0 중 하나이므로 이 값들을 이용해 sort를 사용한다.
  • 난 너무 비효율적으로 푼 것 같다. 배우고 갑니다.
profile
즐거운 코딩
post-custom-banner

0개의 댓글