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

김지원·2021년 6월 21일
0
post-thumbnail

📃 문제 설명

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

🚫 제한 조건

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

🏃‍♂️ js 실행 코드

function solution(strings, n) {
   strings.sort(function(a,b) {
       let first = a[n];
       let second = b[n];
       if (first === second) {
           if (a < b) {
               return -1;
           }
       }else {
           if (first < second) {
               return -1;
           }else {
               return 1;
           }
       }
   });   
    return strings       
}

sort() 메서드를 사용해서 해결하였습니다.
정렬 순서 정의하는 함수 = compareFunction(a, b)

  • compareFunction(a, b)의 return 값이 0이면 변경 x
  • compareFunction(a, b)의 return 값이 0보다 크면 b를 a 보다 낮은 인덱스로 정렬 ( a > b)
  • compareFunction(a, b)의 return 값이 0보다 작으면 a를 b보다 낮은 인덱스로 정렬 (a < b)

🔮 더 효율적인 코드..

function solution(strings, n) {
 strings.sort(function(a,b){
        let first = a[n];
        let second = b[n];
        if(first === second){
            return (a > b) - (a < b);
        }else{
            return (first > second) - (first < second);
        }
    })
    return strings;
}

(a > b) - (a < b) 이런식으로 작성하면 값이 정수로 나오게 됩니다.

왜냐하면!

자바스크립트는 Boolean에 산술 연산자를 대입하면 true는 1, false는 0 으로 인식됩니다.

그래서 return 자체를 비교하여 return 값이 1 혹은 -1이 나오게 해줍니다.

🏃‍♂️ python 실행 코드

def solution(strings, n):
    new_strings = sorted(sorted(strings), key = lambda x : x[n])
    
    return new_strings

📚 사용한 메서드

  • python
    - lambda
  • js
    - sort()

profile
backend-developer

0개의 댓글

관련 채용 정보