더북(TheBook)

4.4 이차 문제

느린 O(N2) 알고리즘을 빠른 O(N) 알고리즘으로 대체할 수 있는 현실적인 예제를 하나 살펴보자.

사용자가 제품에 대해 1부터 10사이로 매긴 평점을 분석하는 자바스크립트 애플리케이션을 작성하고 있다고 하자. 그중에서도 평점 배열에 중복 숫자가 들어 있는지 확인하는 함수를 작성하고 있다. 이 함수는 향후 소프트웨어의 다른 부분에 들어가 보다 복잡한 계산에 쓰인다.

예를 들어 배열 [1, 5, 3, 9, 1, 4]에는 숫자 1이 두 번 나오므로 true를 반환함으로써 배열에 숫자가 중복으로 들어 있다고 알린다.

머릿속에 가장 먼저 떠오르는 방법 중 하나가 다음과 같이 중첩 루프를 사용하는 것이 아닐까 싶다.

function hasDuplicateValue(array) {
    for(let i = 0; i < array.length; i++) {
        for(let j = 0; j < array.length; j++) { 
            if(i !== j && array[i] === array[j]) {
                return true; 
            }
        } 
    }
    return false; 
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.