더북(TheBook)

4.5 선형 해결법

다음처럼 중첩 루프를 쓰지 않는 hasDuplicateValue 함수를 구현해 볼 수 있다. 꽤 영리한 방법이니 어떻게 동작하는지 살펴서 첫 번째 구현보다 더 효율적인지 알아보자.

function hasDuplicateValue(array) {
    let existingNumbers = [];
    for(let i = 0; i < array.length; i++) {
        if(existingNumbers[array[i]] === 1) { 
            return true;
        } else {
            existingNumbers[array[i]] = 1;
        } 
    }
    return false; 
}

이 함수가 하는 일은 다음과 같다. existingNumbers라는 빈 배열을 생성한다.

이후 루프를 사용해 array의 각 숫자를 확인한다. 숫자가 나올 때마다 existingNumbers 배열에서 그 숫자에 해당하는 인덱스에 임의의 값(예제에서는 1)을 넣는다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.