설명 : 문자열 내 마음대로 정렬하기
간단 설명 : 문자열과 인덱스 숫자를 인자로 받는 함수에 인덱스 n번쨰 글자를 기준으로 오름 차순 정렬하는 문제
입출력
strings = [sun, bed, car] n = 1 return = [car, bed, sun]
strings = [abce, abcd, cdx] n = 2 return = [abcd, abce, cdx]
제한 조건
풀이
function solution(strings, n) {
return strings.sort((a, b) =>
a[n] === b[n] ? (a > b) - (a < b) : (a[n] > b[n]) - (a[n] < b[n])
);
}
설명 :
sort()를 이용해서 정렬하자고 생각했다. 제한 조건을 잘 살펴보면 알파벳이 똑같은 경우로 접근하려 했다. 입출력에 두번째 예를 기준삼아 로직을 작성 했다. ASC 2 코를 살펴 보면 각 알파벳에 숫자가 할당되어 있다. sort()는 그런 방법으로 정렬을 한다. 그렇게 때문에 앞글자 a, 뒷글자 b로 가정하고 인덱스에 글자가 (a > b) - (a < b) 이 방법을 쓰면 오름 차순으로 정렬하며 이유는 abce와 abcd를 비교한다면 adc"b"에 해당하는 글자의 할당된 숫자가 68 e에 해당하는 69로 작기때문에 오름 차순 정렬이니까 자리를 바꿔 버린다.
그런 의미에서 하기 로직도 오름차순 정렬이고 인덱스 n에 해당하는 글자가 ASC코드 상에 크고 작음을 비교한다.
(a[n] > b[n]) - (a[n] < b[n])
정리 :
function(a,b) < 0 이면 a를 b보다 작은 인덱스로 정렬한다.
function(a,b) == 0 이면 a와 b의 순서를 바꾸지 않는다.
function(a,b) > 0 이면 b를 a보다 작은 인덱스로 정렬한다.