메모장

코딩테스트 - 숫자를 문자열로 변환 후 아스키 코드로 변환

용용it 2024. 9. 23. 16:03

상황 

숫자를 아스키 코드로 변환해야한다.

단, 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