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((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 메서드가 이해할 수 있는 조건을 충족해줘야 하는 것이다.