[코테] 문자열 내림차순으로 배치하기

JulyK9·2023년 1월 3일

문제

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

제출코드

function solution(str) {
    return str.split("").sort().reverse().join("")
}

접근과정

  • sort를 이용하려면 대상이 배열이어야 하기 때문에 인자로 들어올 str을 배열화 하기 위해 split 메서드 사용하여 배열화 시켜줌
  • sort 정렬 방식에서 문자열 요소는 유니코드의 코드 포인트에 따라 정렬되는데, 순서는 대문자(A-Z), 소문자(a-z)임
  • 유니코드 값으로 영어 대문자가 소문자보다 작기 때문에 오름차순으로 정렬
  • 요구되는 결과가 딱 반대이므로 reverse()를 이용해서 배열 요소를 반대로 뒤집기
  • 정렬된 배열을 문자열로 다시 전환하기 위해 join() 메서드로 리턴되는 출력값 활용

다른풀이

function solution(str) {
    return str.split("").sort((a,b) => a < b ? 1 : -1).join("")
}
  • reverse를 쓰지 않고 sort 메서드 자체적으로 재정렬
  • 삼항연산자로 작성한 부분이 한번에 이해가 잘안가서 풀어서 정리해보았다.
    • a < b 이면 1 :
      a가 b보다 작으면(a가 대문자이고 b가 소문자인 경우, a가 알파벳 순서상 앞쪽인 경우) 1(그대로 유지)
    • a < b 가 아니면 -1 :
      a가 b보다 작은게 아니면(a가 소문자이고 b가 대문자인 경우, a가 알파벳 순서상 뒤쪽인 경우) -1(뒤집어줘)
    • RunJS에서 풀어서 작성해보면서 결과를 보니 좀 더 쉽게 이해가 될수 있었다.
    let str = "ZDAbcdefg".split("")
    let strSorted = str.sort((a,b) => {
      if(a < b) return 1
      else return -1
    })
    console.log("결과: ", strSorted.join(""))
    • 결국 뒤집어야 되는 경우와 아닌 경우를 삼항연산자로 작성해 바로 reverse 된 정렬 상태가 되도록 구현한 것

참고자료

profile
느리지만 꾸준하게. 부족하거나 잘못된 부분은 알려주시면 감사하겠습니다.

0개의 댓글