문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
const solution=(s)=>s.split('').sort((a,b)=>a.charCodeAt()<b.charCodeAt()?1:-1).join('');
문자열을 문자 하나씩 쪼개 배열로 나누고 아스키코드 값을 기준으로 내림차순으로 정렬했다.
매 요소와 요소의 크기를 아스키코드로 변환해서 비교하기 때문에 속도가 좀 느린 것 같다.. 뭔가 놓친 기분!
function solution(s) {
return s
.split("")
.sort()
.reverse()
.join("");
}
뭔가 놓친 기분이 있었는데, 이 풀이를 보고 바로 번뜩 생각났다.
아스키 코드를 생각해 봤을 때 A == 65, a == 97
이라서 내림차순이라면 z가 가장 크기 때문에 맨 앞에 오고 가장 작은 A가 맨 뒤로 정렬된다. 그래서 아스키 코드를 비교할 필요가 없어서 그냥 sort()
함수를 그냥 사용하면 되는데, 문자열은 유니코드 값으로 비교하고 오름차순으로 정렬된다. 정렬 후에 reverse()
로 해주고 배열을 하나의 문자를 합치기위해 join('')
으로 마무리!
유니코드를 보아도 A == 0041, a == 0061
으로 A가 가장 작다
유니코드는 0000 ~ 0FFF까지 있다.
참고 자료 및 사이트 (감사합니다)