반응형

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

문제는 이렇다.

 

 

 

 

 

** Javascript

 

function solution(strings, n) {
    return strings.sort((a, b) => a[n].localeCompare(b[n]) || a.localeCompare(b));
}

 

문제 풀다보면 javascript 능력자들의 코드들을 볼 수 있는데 드디어 나도!!! 한 줄의 간지를 드디어 해봤다!

 

다른 사람 풀이 중에 내 풀이랑 같은 건 아직 없는 것 같다!  ^_____________________________^

 

 

localeCompare 도 이번에 처음 알았다.

 

 

String.prototype.localeCompare()
The localeCompare() 메서드는 기준 문자열과 비교했을 때 비교 대상 문자열이 정렬상 전에 오는지, 후에 오는지 혹은 같은 순서에 배치되는지를 알려주는 숫자를 리턴합니다.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

 

String.prototype.localeCompare() | MDN

The localeCompare() 메서드는 기준 문자열과 비교했을 때 비교 대상 문자열이 정렬상 전에 오는지, 후에 오는지 혹은 같은 순서에 배치되는지를 알려주는 숫자를 리턴합니다.

developer.mozilla.org

 

 

추가적으로 설명을 보태면 알파벳이 locale 를 구분하여 전후관계를 알려준다.

 

 

예시로 콘솔창에

 

let a = ["가", "희", "넘", "고", "루"];
a.sort((a, b) => a.localeCompare(b));
console.log(a);

 

를 작성하면

 

["가", "고", "넘", "루", "희"] 로 정렬된 것을 볼 수 있다.

 

주의할 점은 공백이 있는 경우 공백도 고려되어 정렬된다. 그래서 글자 자체만 비교해야 한다면 공백 제거를 한 뒤에 사용하는 것이 좋다.

 

 

** Java (2021-09-07 추가)

 

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        Collections.sort(Arrays.asList(strings), new Comparator<String>() {
            public int compare(String s1, String s2) {
                if (Objects.equals(0, s1.split("")[n].compareTo(s2.split("")[n]))) {
                    return s1.compareTo(s2);
                }
                return s1.split("")[n].compareTo(s2.split("")[n]);
            } 
        });
        return strings;
    }
}

 

 

 

** Python (2021-09-07 추가)

 

 

cmp_to_key 한 번 써봄

 

from functools import cmp_to_key

def solution(strings, n):
    def string_compare(s1, s2):
        if s1[n] == s2[n]:
            if s1 > s2:
                return 1
            elif s1 == s2:
                return 0
            else:
                return -1
            return s1 - s2
        else:
            if s1[n] > s2[n]:
                return 1
            elif s1[n] == s2[n]:
                return 0
            else:
                return -1
    return sorted(strings, key = cmp_to_key(string_compare))
반응형

+ Recent posts