Coding test

[프로그래머스] 문자열 내림차순으로 배치하기 (Level 1)

Jiwoo 2022. 4. 6. 16:03

문제

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
 

  • 제한 사항

    str은 길이 1 이상인 문자열입니다
     

나의 풀이

function solution(s) {
    // 소문자만 배열 -> 사전순 정렬 -> 역순 정렬
    let lowerArr = s.split("").filter(v => v == v.toLowerCase()).sort((a,b) => a.localeCompare(b)).reverse();

    // 대문자만 배열 -> 사전순 정렬 -> 역순 정렬
    let upperArr = s.split("").filter(v => v == v.toUpperCase()).sort((a,b) => a.localeCompare(b)).reverse();

    return lowerArr.concat(upperArr).join("");
}

 
정확한 정렬을 위해 localeCompare을 이용하려다보니 이렇게 복잡한 코드가 탄생했다...
 

  • 정확도 테스트 결과


     

    다른 풀이

  1. 가장 간결하고 좋은 풀이
    function solution(s) { 
      return s
      .split("")
      .sort()
      .reverse()
      .join(""); 
    }
     
  2. 이외의 풀이
    function solution(s) { 
      return s.split('').sort((a, b) => a.charCodeAt() - b.charCodeAt()).join(''); 
    }
     

    체크

  • sort() : 대문자 -> 소문자 순으로 정렬
  • sort((a,b) ⇒ a.localeCompare(b)) : 소문자 -> 대문자 순으로 정렬
  • sort((a, b) => a.charCodeAt() - b.charCodeAt() : 대문자 -> 소문자 순으로 정렬
    (유니코드에서 대문자 < 소문자)