코딩 기록/자바스크립트 알고리즘

(자바스크립트 알고리즘) 문자열 내 마음대로 정렬하기 - kimyang-sun

kimyang-Sun 2020. 10. 14. 23:41

자바스크립트 알고리즘 (Programmers)


문제 설명

문자열로 구성된 리스트 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(strings, n) {
    strings.sort((a, b) => {
        let aValue = a[n];
        let bValue = b[n];
        return aValue === bValue ? (a > b) - (a < b) : (aValue > bValue) - (aValue < bValue);
    })
    return strings;
}

풀이입니다.

 

문자열 strings 를 sort로 정렬합니다.

 

sort 에서 aValue, bValue에 각각 인덱스 n에 해당하는 값을 넣어주고 비교합니다.

 

만약 둘이 같으면 기존의 문자 정렬 방식대로 정렬하기 위해 (a > b) - (a < b) 을 리턴해주고

 

그렇지 않다면 (aValue > bValue) - (aValue < bValue) 을 해줍니다.

 

이 경우에는 1 or -1 이 나와서 1일 경우 순서가 바뀌고 -1일때는 그대로 정렬되는걸 반복해서

 

원하는 방식대로 정렬됩니다.

 

다른 사람들의 풀이

function solution(strings, n) {
    var answer = [];
    for (var i = 0; i < strings.length; i++) {
        var chu = strings[i][n];
        strings[i] = chu + strings[i];
    }
    strings.sort();
    for (var j = 0; j < strings.length; j++) {
        strings[j] = strings[j].replace(strings[j][0],"");
        answer.push(strings[j])
    }

    return answer;
}