코딩테스트 문자열 정렬하기 sort

lim1313·2021년 7월 28일
0

프로그래머스

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

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 조건
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.


내 풀이

function solution(arr, n){
  return arr.sort((a,b) => (a < b) ? -1 : a === b ? 0 : 1).sort((a,b) => (a[n] < b[n]) ? -1 : (a[n]===b[n]) ?  0 : 1)
}

let a = solution(["abce", "abcd", "cdx"], 1)

console.log(a);

내 풀이 과정

첫번째 sort를 이용하여 오름차순으로 정렬
두번째 sort를 통해 n번째 알파벳 비교를 통해 재정렬

다른 사람 풀이

function solution(strings, n) {
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

  • arr.sort((a,b) => ~~~)
  • localeCompare

sort 알파벳 비교 복습
localeCompare 처음 본다..


학습 내용 정리

arr.sort

arr.sort([compareFunction]);

  • 반환 값 < 0 : a가 b보다 앞에 있어야 한다.
  • 반환 값 = 0 : 순서 변함 없음.
  • 반환 값 > 0 : b가 a보다 앞에 있어야 한다.

숫자 : 2 < 4
소문자 : a < b
대문자 : A < a

오름차순 정렬

arr.sort((a, b) => { 
    return a < b ? -1 : a > b ? 1 : 0;
}) 

내림차순 정렬

arr.sort((a, b) => { 
    return a > b ? -1 : a < b ? 1 : 0;
}) 

str.localeCompare()

str이 compareString보다 앞에 있으면 -1, 뒤에 있으면 1, 같으면 0 반환

'a'.localeCompare('b') // -1 (음수)
'b'.localeCompare('a') // 1 (양수)
'c'.localeCompare('c') // 0 (0)
profile
start coding

0개의 댓글