코딩테스트
문자열 내림차순으로 배치하기
한우종
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을통해 합친후 리턴