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

JavaScript로 배열에서 첫 번째 반복 요소의 인덱스 찾기

문제 정의


문자열이나 숫자 리터럴로 구성된 배열이 주어지며, 이 배열에는 반복되는 값이 있을 수도 있고 없을 수도 있습니다. 우리가 작성해야 할 함수는 배열을 입력받아 첫 번째 반복 요소의 인덱스를 반환하는 것입니다. 만약 배열에 반복되는 요소가 전혀 없다면 -1을 반환해야 합니다.


접근 방법


이 문제는 해시 기반의 객체(map)를 활용하면 효율적으로 해결할 수 있습니다. 알고리즘의 흐름은 다음과 같습니다.


먼저 for 루프를 사용하여 배열을 처음부터 끝까지 순회하면서, 빈 객체(map)를 준비해 각 요소를 로, 해당 요소의 인덱스를 값으로 저장합니다. 순회 도중 이미 map에 존재하는 키를 다시 만나면, 그것이 바로 첫 번째 반복 요소이므로 저장해 둔 인덱스를 즉시 반환합니다. 루프가 끝날 때까지 반복되는 요소를 발견하지 못했다면 -1을 반환합니다.


이 방식은 시간 복잡도 O(n)으로 배열을 한 번만 순회하면 되기 때문에 매우 효율적입니다.


예제 코드


const arr = [12,4365,76,43,76,98,5,31,4];
const secondArr = [6,8,9,32,1,76,98,0,65,878,90];

const findRepeatingIndex = (arr) => {
    const map = {};
    for(let i = 0; i < arr.length; i++){
        if(map[arr[i]]){
            return map[arr[i]];
        }else{
            map[arr[i]] = i;
        }
    }
    return -1;
};

console.log(findRepeatingIndex(arr));
console.log(findRepeatingIndex(secondArr));

실행 결과


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


2
-1

코드 설명


첫 번째 배열 [12, 4365, 76, 43, 76, ...]에서 값 76은 인덱스 2와 인덱스 4에 두 번 등장합니다. 따라서 함수는 첫 번째로 등장한 위치인 2를 반환합니다.


두 번째 배열 [6, 8, 9, 32, 1, 76, 98, 0, 65, 878, 90]은 모든 요소가 고유하므로 반복되는 값이 없고, 함수는 -1을 반환합니다.


참고로 이 코드는 문자열 배열에도 동일하게 적용할 수 있습니다. JavaScript 객체의 키는 내부적으로 문자열로 변환되기 때문에, 숫자든 문자열이든 상관없이 같은 로직으로 처리됩니다.