문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
나의 풀이
문자를 비교하기 위해 아스키코드로 변환해서 내림차순으로 정렬한 후 다시 문자로 바꿔야되겠다고 생각했다.
처음 내 코드 :
function solution(s) {
let answer = [];
for (let i=0; i<s.length; i++) {
s[i] = s[i].charCodeAt();
}
s.sort((a, b) => (a - b));
for (let i=0; i<s.length; i++) {
answer.append(String.fromCharCode(s[i]));
}
return answer;
}
이 코드에는 문제가 많았다. 검색해보니 문자열은 불변(immutable)하기 때문에 따로 배열을 만들어서 문자열 s를 아스키코드로 바꾼값을 담기로 했다. 그리고 배열에 요소를 추가할 때 자바스크립트는 append() 가 아니라 push()를 사용하기 때문에 그 코드도 고쳤다. (append 메소드는 자바스크립트에 없는 코드이고 파이썬 문법이었음)
최종 코드 :
function solution(s) {
let charCodes = [];
let answer = '';
for (let i=0; i<s.length; i++) {
charCodes.push(s[i].charCodeAt());
}
charCodes.sort((a, b) => b - a);
for (let i=0; i<s.length; i++) {
answer += String.fromCharCode(charCodes[i]);
}
return answer;
}
console.log('A'.charCodeAt()) // 65
const p1 = String.fromCharCode(65, 66, 67)
console.log(p1) // "ABC"
console.log("A".codePointAt()) // 65