문자열 s
에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s
는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
제한사항
s
는 길이 1 이상인 문자열입니다.입출력 예
s | return |
---|---|
"Zbcdefg" | "gfedcbZ" |
문자열 s
의 요소 각각을 비교해 정렬해야 하므로, 문자열을 배열로 변환한다.
변환한 배열을 내림차순으로 정렬한 뒤 다시 문자열로 바꿔 return하면 된다.
문자를 큰것부터 작은 순으로 정렬 하는 것이 목적이므로 내림차순이라는 것을 알 수 있다.
문자를 내림차순으로 정렬하려면 ASCII 코드로 비교하는 방법이 있다.
ASCII 코드를 보면 마침 대문자가 소문자보다 값이 작다!
문제가 ASCII 코드로 내림차순 정렬하라고 알려주고 있다..
단순하게 생각하면, 배열을 만들어서 배열에 문자열의 문자들을 순서대로 넣는 방법이 있다.
let arr = [];
for (let i=0; i<s.length; i++) {
arr.push(s[i]);
}
이거보다 더 멋있는 방법이 있다. String.split() 을 사용하면 된다.
let arr = s.split('');
console.log(s); // "Zbcdefg"
console.log(arr); // [Z, b, c, d, e, f, g]
''
로 문자열을 split하면 문자마다 나눠져 배열에 저장된다.
이것 역시, 단순하게 한다면 for문을 이용해 한 문자씩 연결할 수 있다.
let answer = '';
for (let i=0; i<arr.length; i++){
answer += arr[i];
}
Array.join() 을 사용하면 훨씬 간결해진다.
let str = arr.join('');
console.log(arr); // [Z, b, c, d, e, f, g]
console.log(str); // "Zbcdefg"
join 의 매개변수에 아무것도 넣지 않고 join()
으로 사용한다면, 요소들이 쉼표 ,
로 나누어져 저장된다.
위처럼 다 이어붙이고 싶다면 꼭 매개변수에 ''
를 넣어줘야 한다.
소스코드
function solution(s) {
let arr = s.split('');
arr.sort((a, b) => b.charCodeAt(0) - a.charCodeAt(0));
return arr.join('');
}