더북(TheBook)

즉, 필요에 따라 더 똑똑한 알고리즘이 있을 수는 있다. 리스트는 항상 양수만 포함한다는 것을 안다면 앞의 코드에 양수가 아닌 숫자를 처리하는 코드를 추가할 수 있다.

public static bool Contains(int[] array, int lookFor) {
    if (lookFor < 1) {
        return false;
    }
    for (int n = 0; n < array.Length; n++) {
        if (array[n] == lookFor) {
            return true;
        }
    }
    return false;
}

이렇게 하면 음수인 경우를 몇 번 호출하느냐에 따라 알고리즘이 훨씬 빨라질 수 있다. 기껏해야 이 함수에 항상 음수나 0이 입력된다면 배열에 정수 수십억 개가 있더라도 결과를 즉시 반환할 것이다. 최악은 함수 호출에 항상 양수가 들어오는 경우이다. 단지 추가적인 불필요한 검사만 하게 되는 꼴이다. C#에는 uint라는 부호 없는 정수 타입이 있으며, 이러한 특정 타입을 사용할 수 있다. 다음과 같이 수정하면 항상 양수를 입력으로 받을 수 있으며, 해당 규칙을 위반하면 컴파일러가 양수를 검사하므로 성능에 문제가 발생하지 않는다.

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