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

JavaScript로 프로그레시브 배열 확인하기

문자열 배열이 길이 기준 오름차순으로 정렬되어 있을 때, 이 배열이 프로그레시브(progressive) 배열인지 판별하는 JavaScript 함수를 작성해 보겠습니다.

프로그레시브 배열이란?

프로그레시브 배열이란, 연속된 두 문자열 쌍마다 두 번째 문자열이 첫 번째 문자열의 맨 앞 또는 맨 뒤에 글자 하나를 추가하여 만들 수 있는 배열을 의미합니다.

예를 들어 다음과 같은 배열이 주어졌다고 가정해 보겠습니다.

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

각 단계를 살펴보면 다음과 같습니다.

  • "c" → "ca" : 뒤에 'a' 추가
  • "ca" → "can" : 뒤에 'n' 추가
  • "can" → "acan" : 앞에 'a' 추가
  • "acan" → "acane" : 뒤에 'e' 추가
  • "acane" → "dacane" : 앞에 'd' 추가

모든 단계에서 규칙이 성립하므로, 이 경우 함수는 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;
        };
        return false;
    };
    return true;
};
console.log(isProgressive(arr));

코드 동작 원리

  1. for 반복문으로 배열을 처음부터 마지막 바로 앞 요소까지 순회합니다.
  2. 현재 요소 arr[i]와 다음 요소 arr[i+1]를 비교합니다.
  3. 다음 문자열이 현재 문자열의 앞에 한 글자를 붙인 것(arr[i+1][0] + arr[i])과 일치하거나, 뒤에 한 글자를 붙인 것(arr[i] + arr[i+1][nextLength - 1])과 일치하면 계속 진행합니다.
  4. 두 조건 중 어느 것도 만족하지 않으면 즉시 false를 반환합니다.
  5. 모든 쌍이 조건을 통과하면 최종적으로 true를 반환합니다.

출력 결과

콘솔 실행 결과는 다음과 같습니다.

true