대부분의 항목이 연속해서 반복되는 숫자 또는 문자열 리터럴 배열이 주어졌을 때, 우리는 이 배열을 입력받아 연속적으로 나타나지 않는 첫 번째 요소의 인덱스를 반환하는 함수를 작성해야 합니다.
만약 배열에 해당하는 요소가 존재하지 않는다면 함수는 -1을 반환해야 합니다. 이제 이 함수의 코드를 작성해 보겠습니다. 간단한 루프를 사용해 배열을 순회하며 조건에 맞는 요소를 발견하면 즉시 인덱스를 반환하고, 끝까지 찾지 못하면 -1을 반환합니다.
예시
const arr = ['d', 'd', 'e', 'e', 'e', 'k', 'j', 'j', 'h'];
const firstNonRepeating = arr => {
let count = 0;
for(let ind = 0; ind < arr.length-1; ind++){
if(arr[ind] !== arr[ind+1]){
if(!count){
return ind;
};
count = 0;
} else {
count++;
}
};
return -1;
};
console.log(firstNonRepeating(arr));
출력
콘솔에 출력되는 결과는 다음과 같습니다.
5
코드 동작 원리
위 코드의 동작 방식을 단계별로 살펴보겠습니다.
1. 카운터 초기화: 변수 count를 0으로 초기화하여 직전까지 연속으로 등장한 동일 요소의 개수를 추적합니다.
2. 인접 요소 비교: 루프를 돌면서 현재 요소 arr[ind]와 바로 다음 요소 arr[ind+1]을 비교합니다.
3. 연속 여부 판단: 두 요소가 서로 다르고 count가 0이라면, 현재 요소가 앞뒤 어느 쪽과도 연속되지 않았다는 의미이므로 해당 인덱스를 즉시 반환합니다. 두 요소가 다르지만 count가 0보다 크다면 직전까지 연속 구간이 있었다는 뜻이므로 카운터를 0으로 되돌립니다. 두 요소가 같다면 count를 1씩 증가시킵니다.
4. 최종 반환: 배열의 끝까지 확인했음에도 조건에 맞는 요소가 없다면 -1을 반환합니다.
위 예제에서 'd', 'e', 'j'는 각각 연속해서 두 번 이상 등장하지만, 인덱스 5에 위치한 'k'는 딱 한 번만 나타나므로 함수는 5를 반환합니다.