코딩테스트

문자열 내림차순으로 배치하기

한우종 2025. 2. 27. 00:50

문제 설명

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

제한사항

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

나의풀이

JS(for문)

function solution(s) {
const lower = [];
const upper= [];

 for(let i=0;i<s.length;i++){
   if(!/[A-Z]/g.test(s[i])){
       lower.push(s[i])
   }else{
       upper.push(s[i])
   }
     
 }
    lower.sort().reverse()
    upper.sort().reverse()
    return lower.join('')+upper.join('')
}

 

JS(filter 사용)

function solution(s) {
  let lower = s.split('').filter( low => !/[A-Z]/.test(low)).sort((a,b)=>b.localeCompare(a))
  let upper = s.split('').filter( up => /[A-Z]/.test(up)).sort((a,b)=>b.localeCompare(a))
  let result = lower.join('') + upper.join("")
  return result
}

 

정리

for문
lower : 소문자를 담을 배열
upper : 대문자를 담을 배열
/[A-Z]/g.test : 해당 문자에 대문자가 포함되어 있는지 확인하는 정규표현식과 test메서드 
해당 문제에서는 대문자가 아닐경우 lower에 push 대문자일경우 upper에 push
sort : sort의 기본 정렬방식이 오름차순이므로 reverse메서드를 사용해 내림차순으로 변경한후 join을통해 두 문자열을 합쳐서 리턴했다.

filter 메서드 사용
lower : 소문자만 필터링하여 새로운 배열을 생성하고 sort와 localeCompare메서드를 사용해 내림차순으로 정렬
upper : 대문자만 필터링하여 새로운 배열을 생성하고 sort와 localeCompare메서드를 사용해 내림차순으로 정렬
두개의 배열을 join을통해 합친후 리턴