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

JavaScript로 문자열 배열의 점진적 형성 여부 확인하는 방법

이번 글에서는 길이가 오름차순으로 정렬된 문자열 배열을 입력받아, 인접한 두 문자열 쌍마다 뒤의 문자열이 앞의 문자열에 글자 하나를 맨 앞이나 맨 뒤에 추가하여 만들어질 수 있는지 판별하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

함수는 다음 조건을 만족할 때 true를 반환해야 합니다.

  • 배열 내 모든 인접한 문자열 쌍에 대해 검사를 진행합니다.
  • 두 번째 문자열은 반드시 첫 번째 문자열보다 길이가 1만큼 길어야 합니다.
  • 두 번째 문자열은 첫 번째 문자열의 앞 또는 뒤에 알파벳 한 글자를 덧붙인 형태여야 합니다.

예를 들어 다음과 같은 배열이 주어졌을 때 −

const arr = ["c", "ca", "can", "acan", "acane", "dacane"];

각 문자열은 이전 문자열에 글자를 하나씩 추가하며 만들어지므로, 함수는 true를 반환해야 합니다.

구현 로직

핵심 아이디어는 다음과 같습니다.

  • 배열을 순회하면서 현재 문자열과 다음 문자열을 비교합니다.
  • 다음 문자열이 새 글자 + 이전 문자열 형태(앞에 추가된 경우)인지 확인합니다.
  • 그렇지 않다면 이전 문자열 + 새 글자 형태(뒤에 추가된 경우)인지 확인합니다.
  • 두 조건 중 어느 것도 만족하지 않으면 즉시 false를 반환하고, 끝까지 통과하면 true를 반환합니다.

코드 구현

실제 코드는 다음과 같습니다 −

const arr = ["c", "ca", "can", "acan", "acane", "dacane"];

const isProgressive = arr => {
    // 인접한 문자열 쌍을 순서대로 검사
    for(let i = 0; i < arr.length - 1; i++){
        const nextLength = arr[i+1].length;
        // 앞에 글자가 추가된 경우 또는 뒤에 글자가 추가된 경우
        if(arr[i+1] === arr[i+1][0] + arr[i]
           || arr[i+1] === arr[i] + arr[i+1][nextLength - 1]){
           continue;
        };
        // 조건을 만족하지 않으면 false 반환
        return false;
    };
    // 모든 쌍이 조건을 통과하면 true 반환
    return true;
};

console.log(isProgressive(arr));

실행 결과

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

true

마무리

이처럼 문자열 비교와 간단한 반복문만으로도 배열이 점진적으로 형성되는지 손쉽게 검증할 수 있습니다. 시간 복잡도는 배열의 길이를 n이라 할 때 O(n)으로 효율적이며, 문자열 연결 연산이 각 단계에서 상수 시간에 처리되므로 실무에서도 충분히 활용할 수 있는 패턴입니다.