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

JavaScript에서 특수하게 정렬된 배열에서 대상 문자열 검색하기

문제 소개

JavaScript 함수를 작성해야 합니다. 이 함수는 검색할 단어인 target과 고유한 단어들로 구성된 배열을 입력받습니다. 배열은 다음 세 가지 기준으로 정렬되어 있습니다.

  • 길이 기준 오름차순
  • 대문자 개수 기준 내림차순
  • 자연 순서(natural order)

그리고 이 배열에는 target 단어가 반드시 포함되어 있습니다. 함수의 임무는 단어 배열에서 target이 위치한 인덱스(0부터 시작)를 찾아 반환하는 것입니다.

예시 코드

다음은 해결 코드입니다 −

const arr = ['cP', 'rE', 'sZ', 'am', 'bt', 'ev', 'hq', 'rx', 'yi', 'akC', 'nrcVpx', 'iKMVqsj'];
const target = 'akC';
const findTarget = (arr = [], target = '') => {
   const index = arr.indexOf(target);
   return index;
};
console.log(findTarget(arr, target));

실행 결과

다음은 콘솔 출력 결과입니다 −

9

코드 설명

이 문제가 간단하게 해결되는 이유는 배열에 target이 반드시 존재한다는 조건이 보장되기 때문입니다. 따라서 복잡한 탐색 알고리즘을 구현할 필요 없이, JavaScript에서 기본 제공하는 Array.prototype.indexOf() 메서드만으로 충분합니다.

indexOf() 메서드는 배열에서 지정된 요소를 처음 발견한 인덱스를 반환하며, 요소를 찾지 못하면 -1을 반환합니다. 위 예제에서는 'akC'가 배열의 10번째 요소이므로, 0부터 시작하는 인덱스 값인 9가 출력됩니다.

참고로, 배열의 크기가 매우 크다면 선형 탐색 방식인 indexOf()(시간 복잡도 O(n))보다 이진 탐색(O(log n))이 더 효율적일 수 있습니다. 다만 이 문제의 정렬 기준은 일반적인 사전순이 아닌 사용자 정의 기준이므로, 이진 탐색을 적용하려면 해당 정렬 규칙에 맞는 비교 함수를 직접 구현해야 한다는 점을 유의해야 합니다.