코딩테스트 - 숫자를 문자열로 변환 후 아스키 코드로 변환
상황
숫자를 아스키 코드로 변환해야한다.
단, 23이 주어지면 "bc"로 출력이 되어야한다.
a = 1
b = 2
c = 3
...
이때, 한 자리수의 숫자면
바로
String.fromCharCode() 함수를 사용하면 되지만,
자릿수가 늘어나면 문제가 된다.
왜, Why?
123같은 숫자는 숫자 자체로는 자릿수를 나눌 수 없기 때문,
따라서 한 자리의 숫자가 아니면 문자열로 변환 후 분리 한 다음, 아스키 코드로 변환한다.
숫자(Number)를 문자열(String)로 변환 함수
String() 함수 사용
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
Object.prototype.toString() - JavaScript | MDN
Object 객체의 메서드인 toString() 은 해당 object를 표현하는 문자열을 반환합니다. 이 메서드는 사용자가 타입 강제 변환을 통해 파생된 객체에서 재정의할 수 있습니다.
developer.mozilla.org
예시
const paragraph = 12 //숫자임
console.log(String(paragraph));
// 12 문자열임
console.log(typeof(paragraph))
// number
console.log(typeof(String(paragraph)))
// string
typeof 함수를 사용해서 데이터 타입을 확인해보았다.
string으로 잘 변환 된 것을 확인 후
string으로 변환된 "12"를 문자 하나씩 분리한다.
Sting을 분리한다
split() 함수 사용
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split
String.prototype.split() - JavaScript | MDN
split() 메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다.
developer.mozilla.org
예시
const paragraph = 12
console.log(String(paragraph).split(''));
// ['1', '2']
이제 이 string을 map()으로 순환해서 String.fromCharCode() 각 숫자에 대한 알파벳을 만든다.
String.fromCharCode() 함수 사용
참조
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
String.fromCharCode() - JavaScript | MDN
String.fromCharCode() 메서드는 UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환합니다.
developer.mozilla.org
UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해 반환한다.
의문
UTF-16이랑 아스키 코드랑 다른데 이 함수를 왜 쓰는가?
해답
알파벳이나 숫자를 처리할 때는 UTF-16의 하위 값이 아스키 코드와 동일 하기 때문에 문제 없다.
즉, 아스키 코드에서의 a는 97인데,
UTF-16에서도 a는 97이다.
때문에 후술할 코드에서
String.fromCharCode(96 + Number(num)); 가 되는 이유이다.
우리가 원하는 문제의 답은 ab이므로
join() 함수를 이용하여 합친다.
const paragraph = 12
console.log(String(paragraph)
.split('')
.map((num) => String.fromCharCode(96 + Number(num)))
.join('')
);
// ab