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

JavaScript로 문자열 속 각 숫자의 개수를 객체에 저장하는 방법

문제 정의

다음과 같이 여러 숫자가 연속해서 이어진 문자열이 있다고 가정해 보겠습니다.

const str = '11222233344444445666';

이 문자열을 입력받아, 문자열 안에 포함된 각 숫자가 몇 번씩 등장하는지를 나타내는 객체를 반환하는 JavaScript 함수를 작성해야 합니다.

따라서 위 문자열에 대한 기대 출력 결과는 다음과 같습니다.

const output = {
    "1": 2,
    "2": 4,
    "3": 3,
    "4": 7,
    "5": 1,
    "6": 3
};

예제 코드

이 문제를 해결하는 코드는 다음과 같습니다.

const str = '11222233344444445666';
const mapString = str => {
    const map = {};
    for(let i = 0; i < str.length; i++){
        map[str[i]] = (map[str[i]] || 0) + 1;
    };
    return map;
};
console.log(mapString(str));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

{ '1': 2, '2': 4, '3': 3, '4': 7, '5': 1, '6': 3 }

코드 동작 원리

핵심 로직은 매우 간단합니다. 함수 mapString은 빈 객체 map을 생성한 뒤, 문자열의 각 문자를 처음부터 끝까지 순회합니다.

순회 과정에서 (map[str[i]] || 0) + 1 패턴을 사용하는데, 이 부분이 핵심입니다. 해당 숫자가 객체에 이미 존재하면 기존 값에 1을 더하고, 아직 존재하지 않으면 undefined 대신 0으로 처리한 뒤 1을 더해 새 키를 생성합니다. 이처럼 논리 OR(||) 연산자를 활용하면 별도의 조건문 없이도 깔끔하게 카운팅 로직을 구현할 수 있습니다.

모든 문자를 순회한 후에는 각 숫자별 등장 횟수가 담긴 객체를 그대로 반환하며, 시간 복잡도는 O(n)으로 문자열 길이에 비례해 선형적으로 동작합니다.