오늘의 코딩 테스트 한줄 - 문자열 내 마음대로 정렬하기

Edwin·2023년 5월 26일
0
post-thumbnail

프로그래머스 문자열 내 마음대로 정렬하기

  • 아래와 같이 매개변수가 주어지고, 주어진 내용을 다음과 같이 출력하고 싶다.
  • 즉 n번지에 위한 내용으로 정렬하면서, abce, abcd의 경우와 같이 n번지가 동일할 때, 순서대로 정렬하는 것이 표함이다.
    ["sun", "bed", "car"], 1 => ["car", "bed", "sun"]["abce", "abcd", "cdx"], 2 => ["abcd", "abce", "cdx"]
function solution(strings, n) {
    let sortArr = strings.sort().map(el => 
                    el.split(''))
                      .sort((a,b) => a[n] < b[n] ? -1 : a[n] > b[n] ? 1 : 0)
                      .map(el => el.join(''))
    return sortArr
}

나의 풀이

이전에 한번 풀어본적 있는 문제이다. 복습인 것이다.
먼저 전체 정렬을 한 번 해준다. sort() 문자열인 경우, 유니코드로 변환하여 자동으로 나열된다.
이때, 숫자는 정렬되지 않을 수 있기에, sort((a,b) => a-b) 와 같은 고차함수를 사용해야 한다.

둘째, 이제 받아온 strings의 요소를 분해해서 배열 안에 넣어준다.
셋째, 이를 sort((a,b) => a-b)의 고차함수로 내용을 비교해서 정렬을 시켜준다.
넷째, 이후, 배열의 각 요소를 join 하여 출력하면 된다.

sort 메서드 정리하기

문자열 : sort()
숫자열 : sort((a,b) => a-b)
배열(문자열) : sort((a,b) => a[n] < b[n] ? -1 : a[n] > b[n] ? 1 : 0)

a가 작으면 : -1 
a가 더크면 : 1
값이 같으면 : 0 

즉 각 요소를 비교하며, 작으면 앞으로, 크면 뒤로, 동률이면 그대로를 유지하도록 설정해야 sort가 이뤄진다. 이는 문자열의 경우 유니코드 상의 코드 포인트를 기준으로 변환되기 때문이다. 그러기에 단순하게 했을 때 숫자열의 정렬과 같다면 단순한 -(마이너스)가 실행될 뿐 sort의 조건에 충족되지 못한다. 이를 위해서는 삼항연산자를 통해서 -1, 0, 1 과 같이 sort 메서드가 이해할 수 있는 조건을 충족해줘야 하는 것이다.

profile
신학전공자의 개발자 도전기!!

0개의 댓글