문자열 배열이 길이 기준 오름차순으로 정렬되어 있을 때, 이 배열이 프로그레시브(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));코드 동작 원리
for반복문으로 배열을 처음부터 마지막 바로 앞 요소까지 순회합니다.- 현재 요소
arr[i]와 다음 요소arr[i+1]를 비교합니다. - 다음 문자열이 현재 문자열의 앞에 한 글자를 붙인 것(
arr[i+1][0] + arr[i])과 일치하거나, 뒤에 한 글자를 붙인 것(arr[i] + arr[i+1][nextLength - 1])과 일치하면 계속 진행합니다. - 두 조건 중 어느 것도 만족하지 않으면 즉시
false를 반환합니다. - 모든 쌍이 조건을 통과하면 최종적으로
true를 반환합니다.
출력 결과
콘솔 실행 결과는 다음과 같습니다.
true