반응형
출처: 프로그래머스 코딩 테스트 연습, 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
추가적으로 설명을 보태면 알파벳이 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))
반응형
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 정수 제곱근 판별 (0) | 2021.07.22 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 (0) | 2021.07.21 |
[프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2021.07.21 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2021.07.20 |
[프로그래머스] 직사각형 별찍기 (0) | 2021.07.20 |