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

JavaScript에서 문자열을 고유 문자 기준으로 숫자 배열로 매핑하는 방법

문자열을 입력받아 각 문자를 0부터 시작하는 숫자에 매핑하는 JavaScript 함수를 작성해야 한다고 가정해 봅시다. 함수가 문자열을 순회할 때 처음 등장하는(고유한) 문자를 만나면 매핑 카운트를 1씩 증가시키고, 중복된 문자를 만나면 이전과 동일한 숫자를 부여하는 방식입니다.

문제 예시

예를 들어, 다음과 같은 문자열이 있다고 해보겠습니다.

const str = 'heeeyyyy';

이때 기대되는 출력 결과는 다음과 같습니다.

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

결과를 살펴보면 첫 번째 문자 'h'는 새로운 문자이므로 0으로 매핑되고, 그다음 세 개의 'e'는 같은 문자가 연속으로 반복되므로 모두 1로 매핑됩니다. 마지막 네 개의 'y' 역시 동일하게 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));

코드 동작 원리

이 코드의 핵심 로직은 다음과 같습니다.

먼저 결과를 담을 빈 배열 res와 현재 문자를 저장할 변수 curr, 그리고 매핑 카운트 count(초기값 -1)를 선언합니다. 이후 for 반복문으로 문자열을 한 글자씩 순회하면서, 현재 문자가 직전 문자 curr와 같으면 기존 카운트를 그대로 배열에 추가하고, 다르면 카운트를 1 증가시킨 후 새로운 값으로 갱신합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

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

이처럼 간단한 반복문 하나만으로도 문자열 내 문자의 반복 패턴을 손쉽게 숫자 배열로 변환할 수 있습니다. 이러한 기법은 문자열 압축, 패턴 분석, 데이터 정규화 등 다양한 상황에서 유용하게 활용될 수 있습니다.