본문 바로가기
개발/알고리즘

프로그래머스 문자열 내맘대로 정하기 ( JS, Array.sort() )

by 안뇽! 2021. 12. 28.
반응형

문제는 위와 같다.

 

이 문제의 열쇠는 Array.sort()를 제대로 아느냐 마느냐 이다.

 

이전까지 문자열 정렬을 할일이 없었어서

 

sort()를 공부하지 않았고, Array.sort((a,b)=>a-b)만 사용해왔다.

 

이번기회로 문자열정렬에 대해서도 알게되었다!

 

 

문자열 정렬에 알아야할 sort()메서드의 특징

우선 sort((a,b)=>{console.log(a,b)})를 통해 비교함수 내의 매개변수가 무엇을 가리키는지부터 알아보자.

strings=['sun','bed','car']

strings.sort((a,b)=>console.log('a:',a +'  '+ 'b:',b)})
//	a: bed  b: sun
//  a: car  b: bed

 

배열내를 1번째 인덱스부터 (strings.length-1)번째 인덱스까지 순회한다고 생각했을때,

첫번째 매개변수 a가 i번째 인덱스, b가 i-1번째 인덱스를 가리킴을 확인할 수 있다.

 

그렇다면 비교함수의 리턴값은 어떤결과를 가져올까??

 

아래 언급한 참고자료 홈페이지에서 아주 잘 정리해놓았다. 나도 그 내용을 배껴서 적기로 한다.

 

비교함수를 function (a,b) 라 했을떄, 비교함수는 다음 규칙을 따른다.

 

function(a,b) < 0 이면 a를 b보다 작은 인덱스로 정렬한다.

function(a,b) == 0 이면 a와 b의 순서를 바꾸지 않는다.

function(a,b) > 0 이면 b를 a보다 작은 인덱스로 정렬한다.

 

 

그렇기 때문에 이 문제에서는 다음과 같이 작성한 것이다.

 

function solution(strings, n) {
    return strings.sort((a,b)=>{
        //문제 조건에 따라 인덱스1의 문자가 같은 문자열이 여럿일 경우, 
        //사전순으로 앞선 문자열이 앞쪽에 위치
        //문자열 전체를 비교한다.
		if(a[n]===b[n]){
            return (a>b)-(b>a)
        }
        else
        //해당 인덱스의 문자를 비교한다.
        return (a[n]>b[n])-(b[n]>a[n])
    })
    //function(a,b)>0이면 b를 a보다 앞에 둔다
    //function(a,b)<0이면 b를 a보다 뒤에 둔다.
    //function(a,b)===0이면 순서를 바꾸지 않는다.
}

참고자료 https://wooder2050.medium.com/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%82%B4-%EB%A7%88%EC%9D%8C%EB%8C%80%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0-javascript-f8f431cedee7

 

 

 

 

반응형