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

goody·2021년 2월 17일
0

알고리즘

목록 보기
42/90

문제

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

제한 조건

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

## 예시 |strings|n|return| |:----|:---|:----| |["sun","bed","car"]|1|["car","bed","sun"]| |["abce","abcd","cdx"]|2|["abcd","abce","cdx"]|

풀이

  • 특정 인덱스의 문자를 기준으로 배열을 정렬하는 문제이다.
  • sort 함수 내부에서 콜백 함수로 정렬 로직을 구현한다.
  • sort 함수는 원소를 유니코드로 변환하여 비교하므로, 인덱스의 알파벳을 유니코드화 한다.
  • 유니코드화 한 알파벳끼리 비교한다.
  • 두 알파벳이 같은 경우, 사전처럼 비교를 해야 하므로 문자열의 맨 앞 알파벳부터 두 알파벳이 달라질때까지 루프를 돈다.
  • 두 알파벳이 다른 지점에서 다시 비교를 한다.

코드

function solution(strings, n) {
    let answer = [];
    answer = strings;

    answer.sort(function (a, b) {
        if (a[n].charCodeAt(0) === b[n].charCodeAt(0)) {
            let idx = 0;
            while (a[idx].charCodeAt(0) === b[idx].charCodeAt(0)) {
                idx++;
            }
            return a[idx].charCodeAt(0) - b[idx].charCodeAt(0);
        }
        return a[n].charCodeAt(0) - b[n].charCodeAt(0);

    });
    return answer;
}

0개의 댓글