빅 오 관점에서 이 새로운 알고리즘의 효율성을 알아내려면 한 번 더 최악의 시나리오일 때 알고리즘에 필요한 단계 수를 알아내야 한다.
이 알고리즘에 포함된 단계 중 주요 유형은 각 숫자를 보고 existingNumbers에서 해당 인덱스의 값이 1인지 확인하는 것이다.
if(existingNumbers[array[i]] === 1)
(비교 외에 existingNumbers 배열에 삽입도 해야 하지만 이 분석에서 삽입 유형은 중요하지 않게 본다. 5장에서 더 설명하겠다.)
최악의 시나리오는 배열에 중복 값이 없을 때 발생한다. 이때 함수는 전체 루프를 모두 수행해야 한다.
새로운 알고리즘은 데이터 원소가 N개 있을 때 비교를 N번 하는 듯하다. 단 하나의 루프에서 단지 배열에 있는 원소 수만큼 순회하기 때문이다. 자바스크립트 콘솔에서 단계 수를 추적함으로써 이 이론이 맞는지 테스트해보자.
function hasDuplicateValue(array) {
let steps = 0;
let existingNumbers = [];
for(let i = 0; i < array.length; i++) {
steps++;
if(existingNumbers[array[i]] === 1) {
return true;
} else {
existingNumbers[array[i]] = 1;
}
}
console.log(steps);
return false;
}