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

문제
8.3/100
포기

기본적인 내용

n번째 위치에 따라 정렬하되 같을경우 문자열 전체를 사전순으로 정렬

다른사람 코드

function solution(strings, n) {
    // strings 배열
    // n 번째 문자열 비교
    return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}

localeCompare 메소드

기준 문자열과 비교했을 때 비교 대상 문자열이 정렬상 전에 오는지, 후에 오는지 혹은 같은 순서에 배치되는지를 알려주는 숫자를 리턴

'c'.localeCompare('a')	//1
'c'.localeCompare('e')	//-1
'c'.localeCompare('f')	//-1
'abc'.localeCompare('abf')	//-1
'abc'.localeCompare('bfq')	//-1
'bp'.localeCompare('bfq')	//1
  • 알파벳 사전순으로 정리하는데 용이하다.
strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));

해당위치의 값이 같지 않을 경우 s1[n] 과 s2[n]을 비교하여 s1[n]이 더 크면 양수를 리턴하고 s2[n]이 더 크면 음수를 리턴한다.
(아스키코드로 계산하듯이 생각)
그것이 아니라면 전체 문자열을 통해 비교

sort

sort((a,b)=>a-b) a-b가 음수일 경우 a와 b는 그 위치가 맞다. 더 바뀌지마 a-b가 양수일 경우 a와 b는 그위치가 아니다 바뀌어야한다.
8, 10 은 -2가되므로 오름차순으로 맞으니 내비둔다.
5, 3 은 2가되므로 오름차순에 틀리니 바꾼다.

sort((a,b)=>b-a) b-a가 음수일 경우 a와 b는 그 위치가 맞다. 더 바뀌지마 b-a가 양수일 경우 a와 b는 그위치가 아니다 바뀌어야한다.
10, 8 은 2가되므로 내림차순으로 맞으니 내비둔다.
5, 7 은 -2가되므로 내림차순에 틀리니 바꾼다.

즉, sort((s1,s2) => s1[n].localeCompare(s2[n]))
s1[n]이 s2[n]보다 크다면 양수이므로 크다는 것은 알파벳이 더 뒤에있는 것이고 양수이면 바꿔야되므로 오름차순의 형태이다.

정리

  • sort의 음수는 내비둬 양수면 둘이 위치바꿔

좋은 웹페이지 즐겨찾기