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

JavaScript로 문자열의 고유 문자를 배열에 매핑하는 방법

문제 소개

이번 글에서는 문자열을 입력받아 각 문자를 0부터 시작하는 숫자로 매핑하는 JavaScript 함수를 작성해 보겠습니다.

요구 사항은 다음과 같습니다.

  • 함수는 문자열을 인수로 받습니다.
  • 문자열의 각 문자를 처음 만나면(고유 문자) 매핑 카운트를 1 증가시켜 새로운 번호를 할당합니다.
  • 이미 등장했던(중복된) 문자를 만나면 새 번호 대신 기존에 할당된 동일한 번호를 매핑합니다.

예시

입력 문자열이 다음과 같다고 가정해 보겠습니다.

const str = 'heeeyyyy';

'h'는 첫 등장이므로 0, 'e'는 세 번 반복되므로 모두 1, 'y'는 네 번 반복되므로 모두 2를 받습니다. 따라서 기대되는 출력은 다음과 같습니다.

const output = [0, 1, 1, 1, 2, 2, 2, 2];

구현 코드

다음은 위 로직을 구현한 코드입니다.

const str = 'heeeyyyy';
const mapString = str => {
    const res = [];
    let curr = '', count = -1;
    for(let i = 0; i < str.length; i++){
       if(str[i] === curr){
           res.push(count);
       }else{
           count++;
           res.push(count);
           curr = str[i];
       };
   };
   return res;
};
console.log(mapString(str));

코드 동작 원리

  • curr: 직전에 매핑한 문자를 저장하는 변수입니다.
  • count: 마지막으로 할당된 매핑 번호입니다. 초기값을 -1로 두어 첫 번째 새로운 문자가 등장할 때 0이 되도록 합니다.
  • 반복문 안에서 현재 문자가 curr와 같으면 기존 count 값을 그대로 결과 배열에 추가하고, 다르면 count를 1 증가시킨 뒤 새 번호를 추가하고 curr를 현재 문자로 갱신합니다.

실행 결과

위 코드를 콘솔에서 실행하면 다음과 같은 출력을 확인할 수 있습니다.

[
    0, 1, 1, 1,
    2, 2, 2, 2
]

결과 배열에서 'h'는 0, 'eee'는 모두 1, 'yyyy'는 모두 2로 매핑되어 요구 사항을 정확히 충족하는 것을 볼 수 있습니다. 이 방식은 시간 복잡도 O(n)으로 문자열을 한 번만 순회하며 처리하므로 효율적입니다.