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

goodlana·2020년 8월 28일
0

알고리즘

목록 보기
2/3
post-thumbnail

나의 삽질기!

  • 30분 내에 풀지 못함.
  • strings의 인덱스/요소[n]으로 해서 객체를 만들고, 객체 값인 요소[n]으로 다시 객체를 임의의 배열에 순서대로 재정렬한 뒤
  • 그 재정렬한 배열에 들어오는 각 개체의 인덱스 값만 Object.keys로 뽑아내려고 했음.

Solution1

아래의 solution2보다는 원리 이해에 가까운 코드

function solution(strings, n) {
    return strings.sort((a,b) => {
        if(a[n] > b[n]) {
            return 1
        }
        if(a[n] < b[n]) {
            return -1
        }
        if(a[n] === b[n]) {
            return a.localeCompare(b) // 0이 나온다. 결국 strings에서 앞에 있는 요소가 먼저 나올 것.
        }
    })
}

Solution2

function solution(strings, n) {
  return strings.sort((a,b) => 
    a[n] === b[n] ? a.localeCompare(b) : a[n].localeCompare(b[n]))
}

사용한 메소드

sort()
a.localeCompare(b)

공부한 내용

  • localeCompare라는 메소드 자체도 생소했는데,
    sort내부에서 localeCompare를 돌려서 사용해보니, sort의 동작하는 원리를 (조금이나마) 알 수 있었다.
  • a.localeCompare(b)
    배열의 정렬도 가능함.
    a===b이면 0이 나오고
    a가 b보다 앞에 있으면 양수가 나오고
    a가 b보다 뒤에 있으면 음수가 나온다.
  • sort()
    a-b ==> 오름차순, b-a ==> 내림차순
    function(a,b) < 0 이면 a를 b보다 작은 인덱스로(오름차순) 정렬한다.
    function(a,b) == 0 이면 a와 b의 순서를 바꾸지 않는다.
    function(a,b) > 0 이면 b를 a보다 작은 인덱스로(내림차순) 정렬한다.
profile
Let's code like chord !

0개의 댓글