문제 정의
문자열 배열을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 배열에서 가능한 모든 n개의 연속된 문자열 조합을 하나씩 이어 붙여 만들고, 그중 가장 긴 문자열 중 먼저 나오는 것을 반환해야 합니다.
예제 코드
다음은 위 문제를 해결하는 전체 코드입니다.
const arr = ["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"];
const num = 2;
function longestConsec(strarr, k) {
if (strarr.length == 0 || k > strarr.length || k <= 0) return '';
let longStr = '';
let newStr = '';
for (let i = 0; i < strarr.length; i++){
newStr = strarr.slice(i, i+k);
if (newStr.join('').length > longStr.length ){
longStr = newStr.join('');
}
}
return longStr;
}
console.log(longestConsec(arr, num));출력 결과
abigailtheta
코드 동작 원리
이 알고리즘은 다음과 같은 단계로 동작합니다.
1. 유효성 검사
배열이 비어 있거나, k가 배열 길이보다 크거나, k가 0 이하인 경우에는 유효한 조합을 만들 수 없으므로 빈 문자열('')을 즉시 반환합니다.
2. 슬라이딩 윈도우 방식으로 순회
for 반복문을 사용해 시작 인덱스 i를 0부터 배열 끝까지 이동시키면서, slice(i, i+k)로 현재 위치에서 시작하는 k개의 연속된 문자열을 추출합니다.
3. 길이 비교 후 갱신
추출한 문자열들을 join('')으로 하나로 합친 뒤, 지금까지 찾은 가장 긴 문자열(longStr)보다 길다면 longStr을 새로운 값으로 갱신합니다.
4. 결과 반환
모든 경우를 확인한 후 longStr을 반환하면, 길이가 같은 조합이 여러 개일 때는 먼저 등장한 조합이 자연스럽게 유지됩니다.
위 예제에서 num이 2이므로 두 개씩 연속된 문자열을 합쳐 보게 되며, 그중 가장 긴 조합인 'abigail' + 'theta' = 'abigailtheta'(길이 12)가 최종 결과로 출력됩니다.