[TIL] 내 마음대로 문자열 정렬

이현동·2023년 1월 19일
0

TIL

목록 보기
10/59
post-custom-banner

문제

문자열로 구성된 리스트 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) {
    let answer = [];
    let alphabet;
    for (let i = 0; i < strings.length; i++) {
        alphabet = strings[i][n] + strings[i]; // 1. 인덱스 값을 받아서 스트링의 인덱스 문자를 받는다.
        strings[i] = alphabet; // 2. 앞 글자에 받은 인덱스 문자를 붙인다.
    }
    strings.sort(); // 3. 정렬한다.
    for (let i = 0; i < strings.length; i++) {
        strings[i] = strings[i].substr(1); // 4. 맨 앞 문자를 자른다.
        answer.push(strings[i]);
    }
    return answer;
}

나는 원하는 문자를 따로 뽑은 뒤에 각 배열의 단어 앞에 문자를 붙인 후, 정렬한 뒤 다시 문자를 떼는 과정을 거쳐 해결했다.

다른 코드

function solution(strings, n) {
    var answer = [];
    strings.sort((a,b)=>{
        if(a[n]>b[n]){ // a가 b보다 크면 ture, 반대 false
            return 1 // sort()에서 a가 b보다 앞 쪽에 위치
        } else if(b[n]>a[n]){
            return -1 // b가 a보다 앞으로
        } else if(a[n]==b[n]){ // a와 b가 같은 경우에는
            if(a>b){ // 전체를 비교해서 정렬
                return 1
            } else if(a<b){
                return -1
            }   else{
                return 0 // a와 b의 순서를 바꾸지 않음
            }
        }
    })
    return strings
}

다른 사람의 풀이와 설명을 들으면서 sort()에 대해서 하나 더 알아갈 수 있었다 !


참고자료

sort MDN

profile
https://hdlee.dev
post-custom-banner

0개의 댓글