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

연쇄코딩마·2021년 1월 20일
0
post-thumbnail

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

간단 설명 : 문자열과 인덱스 숫자를 인자로 받는 함수에 인덱스 n번쨰 글자를 기준으로 오름 차순 정렬하는 문제

입출력
strings = [sun, bed, car] n = 1 return = [car, bed, sun]
strings = [abce, abcd, cdx] n = 2 return = [abcd, abce, cdx]

제한 조건

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

풀이

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보다 작은 인덱스로 정렬한다.

profile
只要功夫深,铁杵磨成针

0개의 댓글