[Programmers] 문자열 내 마음대로 정렬하기 (JS)

nRecode·2021년 1월 12일
0

Algorithm

목록 보기
26/48

문제

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

입출력 예
input: [sun, bed, car], 1
output: [car, bed, sun]

접근

이번 문제는 sort()를 이용해서 풀어야한다.
sort는 매개변수를 생략하면 배열은 각 요소에 오름차순으로 정렬된다. 그러나 이 문제는 각 요소의 n번째 글자를 기준으로 정렬하므로 매개변수인 함수를 만들어준다.

매개변수인 함수 compare(a,b)에서
positive인 함수를 return하면 b를 a보다 낮은 인덱스로 소트하고,
negative인 함수를 return하면 a를 b보다 낮은 인덱스로 소트한다.
(0을 리턴하면 변경하지 않는다.)

풀이

function solution(strings, n) {
    return strings.sort((a, b) => {
        if(a[n] > b[n]) return 1;
        if(a[n] < b[n]) return -1;
        if(a[n] === b[n]){
            if(a > b) return 1;
            if(a < b) return -1;
            return 0;
        }
    })
}

localCompare()를 활용할 수 있다.

//localCompare()의 예시
'a'.localeCompare('c'); // -2 or -1 (or some other negative value)
'check'.localeCompare('against'); // 2 or 1 (or some other positive value)
'a'.localeCompare('a'); // 0
function solution(strings, n) {
    return strings.sort((a, b) => a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n]));
}

mdn | sort()
mdn | localCompare()

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글