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

JavaScript로 문장에서 인접한 동일 단어 쌍 개수 세는 방법

문제 정의

JavaScript 함수를 작성해야 합니다. 이 함수는 하나의 문자열 str, 즉 하나의 문장을 유일한 인수로 받습니다.

함수의 목표는 문자열에서 서로 인접해 있는 동일한 단어 쌍의 개수를 세어 반환하는 것입니다. 이때 단어를 비교할 때는 대소문자를 구분하지 않아야 합니다. 즉, 'it'과 'It'은 같은 단어로 간주하여 개수에 포함됩니다.

예를 들어, 함수에 다음과 같은 입력이 주어진다고 가정해 보겠습니다.

입력

const str = 'This this is a a sample string';

출력

const output = 2;

출력 설명

'This this'와 'a a'처럼 반복되는 단어 쌍이 'this'와 'a' 두 곳에 존재하기 때문에 결과값은 2가 됩니다.

해결 접근 방식

이 문제는 다음과 같은 순서로 해결할 수 있습니다.

1. split(' ') 메서드를 사용해 문장을 공백 기준으로 나누어 단어 배열을 만듭니다.
2. 배열을 순회하면서 현재 단어와 바로 다음 단어를 비교합니다.
3. 비교 시 두 단어 모두 toLowerCase()로 소문자로 변환하여 대소문자 차이를 무시합니다.
4. 두 단어가 같으면 카운트를 1 증가시킵니다.
5. 마지막 단어는 다음 단어가 없으므로 배열 길이에서 1을 뺀 범위까지만 순회합니다.

예제 코드

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

const str = 'This this is a a sample string';

const countIdentical = (str = '') => {
    const arr = str.split(' ');
    let count = 0;
    for(let i = 0; i < arr.length - 1; i++){
        const curr = arr[i];
        const next = arr[i + 1];
        if(curr.toLowerCase() === next.toLowerCase()){
            count++;
        };
    };
    return count;
};

console.log(countIdentical(str));

실행 결과

2

코드 설명

이 코드의 시간 복잡도는 O(n)입니다. 여기서 n은 문장 내 단어의 개수입니다. 배열을 한 번만 순회하면서 인접한 두 단어를 비교하기 때문에 매우 효율적입니다.

또한 기본 매개변수(default parameter)를 활용해 빈 문자열이 전달되더라도 오류 없이 0을 반환하도록 처리했습니다. 공백으로 구분된 일반적인 영어 문장이라면 이 방법으로 충분하지만, 문장 부호나 여러 개의 연속된 공백이 포함된 경우에는 정규표현식(str.split(/\s+/))을 사용해 분리하는 것이 더 안전합니다.