더북(TheBook)

빅 오 관점에서 이 새로운 알고리즘의 효율성을 알아내려면 한 번 더 최악의 시나리오일 때 알고리즘에 필요한 단계 수를 알아내야 한다.

이 알고리즘에 포함된 단계 중 주요 유형은 각 숫자를 보고 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; 
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.