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

JulyK9·2023년 1월 3일
0

문제

문자열 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개의 댓글