이번 과제는 이진 탐색 알고리즘을 구현하는 거예요.
이진 탐색 알고리즘은 배열을 절반으로 계속 나누면서, 찾고 있는 항목이 들어 있는 절반만 남기는 방식으로 항목을 찾아요. 이렇게 하면 항목을 찾을 때까지, 또는 가능한 모든 위치를 없앨 때까지 항목이 있을 수 있는 위치를 빠르게 좁혀 나갈 수 있어요.
이진 탐색은 배열이 정렬되어 있을 때만 동작해요.
알고리즘은 다음과 같아요:
예를 들어볼까요?
다음과 같이 정렬된 배열에서 숫자 23을 찾는다고 해봐요: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32]만 남겨요.[23].때로는 예외를 발생시켜야 할 때가 있어요. 이럴 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 함께 넣어야 해요. 그러면 code를 더 읽기 쉽게 만들어 주고 debugging에도 큰 도움이 돼요. 오류의 원인이 특정 유형이라고 알고 있는 상황이라면 내장 오류 유형 중 하나를 골라 발생시켜도 되지만, 그래도 의미 있는 메시지는 꼭 포함해야 해요.
이 연습 문제에서는 주어진 값이 배열 안에서 발견되지 않을 때 raise 문으로 ValueError를 "던져야" 해요. 테스트는 exception을 raise하면서 메시지도 함께 포함해야만 통과해요.
메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 유형의 인자로 작성해요.
# example when value is not found in the array.
raise ValueError("value not in array")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.