문제 개요
소문자 문자열을 입력받아 새로운 문자열을 반환하는 JavaScript 함수를 작성해야 합니다. 변환 규칙은 다음과 같습니다.
- [a, m] 범위에 속하는 모든 알파벳은 0으로 변환합니다.
- [n, z] 범위에 속하는 모든 알파벳은 1로 변환합니다.
- 공백이나 특수 문자와 같은 알파벳이 아닌 문자는 원본 그대로 유지합니다.
예를 들어 'h'는 a~m 사이에 있으므로 0이 되고, 'w'는 n~z 사이에 있으므로 1이 됩니다.
구현 코드
다음은 위 문제를 해결하는 전체 코드입니다 −
const str = 'Hello worlld how are you';
const stringToBinary = (str = '') => {
const s = str.toLowerCase();
let res = '';
for(let i = 0; i < s.length; i++){
// 특수 문자 처리
if(s[i].toLowerCase() === s[i].toUpperCase()){
res += s[i];
continue;
};
if(s[i] > 'm'){
res += 1;
}else{
res += 0;
};
};
return res;
};
console.log(stringToBinary(str));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다 −
00001 111000 011 010 111
코드 동작 원리
코드가 동작하는 과정을 단계별로 살펴보겠습니다.
toLowerCase()메서드를 사용해 입력 문자열 전체를 소문자로 먼저 변환합니다. 이렇게 하면 대소문자 혼용 여부와 관계없이 일관된 비교가 가능합니다.- 반복문으로 각 문자를 순회하면서, 해당 문자를 대문자로 바꿨을 때도 값이 동일하다면 알파벳이 아닌 문자(공백, 숫자, 기호 등)로 판단하여 그대로 결과에 추가합니다.
- 알파벳인 경우에는 기준 문자 'm'과 비교합니다. 'm'보다 크면(n~z) 1을, 그렇지 않으면(a~m) 0을 결과 문자열에 이어 붙입니다.
이처럼 문자 비교 연산만으로 간단하게 문자열을 이진 형태로 매핑할 수 있으며, 시간 복잡도는 문자열 길이에 비례하는 O(n)입니다.