Programmers/Level 1

[Javascript] 프로그래머스 : 문자열 내림차순으로 배치하기

emayom 2021. 7. 4. 18:10

[Javascript] 프로그래머스 Level1 _ 문자열 내림차순으로 배치하기

 

👇🏻

Link_Click

 

👇🏻

시행착오

( + 코드를 작성하면서 든 생각들.)


1.

예제는 이미 정렬된 상태이기 때문에 //주석 처리된 코드로 실행해도 통과가 된다.

하지만 다른 테스트 케이스들처럼 정렬이 되지 않은 상태라면 틀린 코드가 된다!

그렇기 때문에 먼저 정렬을 하고 .reverse()를 통해 역순으로 정렬을 한 뒤에 합쳐줘야 한다.

function solution(s) {
    //return s.split('').revers().join('');
    return s.split('').sort().reverse().join('');
} 

+)

보통 우리는 역순으로 숫자를 정렬할 때 sort()에 ((a,b) => b-a ); 함수식을 파라미터로 전달해서 정렬했다.

여기서도 이렇게 사용하면 뒤집어져서 배열이 정렬될 거라고 생각했지만 출력해보면 그렇지 않았다.

왜 그런지 확인해보자!

function solution(s) {

    return s.split('').sort().join('');
    // "Zbcdefg"
    
    return s.split('').sort((a,b) => b-a).join('');
    // "Zbcdefg" => "bcdefgZ"가 나와야하는 것 아닌가 ? ㅠㅠ
}

 

sort()는 compareFunction을 생략한다면

기본적으로 👇🏼 유니코드 코드 포인트를 기준으로 오름차순으로 정렬한다.

 

A Z a z
U+0041 U+005A U+0061 U+007A

유니코드 코드 포인트는 A < Z < a < z 순으로 증가한다. (즉, 대문자가 소문자보다 작다고 판단)

 

예제를 통해 확인해보면, 

str.sort() 오름차순  ["A", "B", "C", "D", "a", "b", "c", "d"]
str.sort((a,b) => b-a); 내림차순  ["a", "b", "c", "d", "A", "B", "C", "D"]

대문자는 대문자대로 소문자는 소문자대로 정렬 한 것을 

[ 대문자 정렬 ]  [ 소문자 정렬 ] 

[ 소문자 정렬 ]  [ 대문자 정렬 ] 으로 정렬해서 리턴한다.

 

내림차순의 결괏값을 살펴보면 d가 A보다 크고, D가 A보다 큰데도 말이다.

그래서 정렬된 배열의 순서를 기준으로 그대로 뒤집고 싶다면 reverse()를 사용하는게 좋다.

a b c d A B C D
U+0061 U+0062 U+0063 U+0064 U+0041 U+0042 U+0043 U+0044

 

 

그렇다면 A 직전의 유니코드 코드 포인트 U+0040은 무엇일까?

더보기

정답 : "@"이다!

 

 

[참고]  어딘가 이상한 자바스크립트 문자열 배열 정렬 이야기

 

어딘가 이상한 자바스크립트 문자열 배열 정렬 이야기

이 글은 문자열을 가진 배열을 정렬할 때 만날 수 있는 상황들 중 몇 가지를 살펴봅니다.

changjoopark.medium.com

 

 

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***