코딩 실습 자료
학습 대상: 파이썬 반복문을 배운 입문자
1 binary_search 직접 구현하기
원문 코드
def binary_search(items, target):
low, high = 0, len(items) - 1
while low <= high:
mid = (low + high) // 2
if items[mid] == target:
return mid
if items[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
실습 프롬프트
정렬된 정수 목록 items와 찾을 값 target을 받아 위치를 돌려주는 binary_search를 직접 구현하세요. 찾지 못하면 -1을 돌려주고, 반복할 때마다 low·high·mid를 출력해 범위가 줄어드는 과정을 확인하세요.
실습 코드(생성 예제 · 실행하지 않음)
def binary_search(items, target):
low, high = 0, len(items) - 1
while low <= high:
mid = (low + high) // 2
print(f"low={low} high={high} mid={mid}")
if items[mid] == target:
return mid
if items[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
print(binary_search([2, 5, 8, 12, 16], 12))
검증 단계
- binary_search.py로 저장한 뒤 python binary_search.py를 실행하세요.
- 출력된 low·high·mid가 반복마다 남은 범위를 절반으로 줄이는지 확인하세요.
- 마지막 줄에 3이 출력되는지 확인하고, 다르면 mid 계산과 비교 방향을 점검하세요.
기대 결과(실행하지 않음)
low=0 high=4 mid=2, low=3 high=4 mid=3 순서로 출력된 뒤 3을 출력합니다. 직접 작성한 예시이며 실행 결과가 아닙니다.
2 없는 값과 빈 목록 확인하기
원문 코드
scores = [2, 5, 8, 12, 16]
print(binary_search(scores, 12))
print(binary_search(scores, 7))
실습 프롬프트
목록에 없는 값 7과 빈 목록 []을 넣었을 때 binary_search가 -1을 돌려주는지 assert로 확인하는 코드를 작성하세요.
실습 코드(생성 예제 · 실행하지 않음)
scores = [2, 5, 8, 12, 16]
assert binary_search(scores, 7) == -1
assert binary_search([], 3) == -1
print("없는 값 처리 확인 완료")
검증 단계
- 앞 단계의 binary_search 정의 아래에 이 코드를 붙여 실행하세요.
- AssertionError 없이 마지막 문장이 출력되는지 확인하세요.
기대 결과(실행하지 않음)
"없는 값 처리 확인 완료"가 출력됩니다. 직접 작성한 예시이며 실행 결과가 아닙니다.