Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열을 이진 문자열(0과 1)로 변환하는 방법

문제 개요

소문자 문자열을 입력받아 새로운 문자열을 반환하는 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)입니다.