라떼군 이야기


1 / 16강

문제를 정확하게 적기

문제를 읽자마자 코드를 쓰지 말고 무엇을 받아 무엇을 돌려줄지 한 문장으로 적어 보세요. ‘가장 큰 수 찾기’에도 빈 입력을 허용하는지, 음수가 들어오는지 같은 조건이 필요합니다.

네 가지를 정합니다

def maximum(values):
    if not values:
        return None
    best = values[0]
    for value in values:
        if value > best:
            best = value
    return best

print(maximum([-8, -2, -6]))
print(maximum([]))

출력은 -2, None입니다. 최댓값을 처음부터 0으로 두면 음수만 있는 입력에서 틀립니다. 주어진 값에서 출발해야 올바른 후보를 유지합니다.

맞는 이유를 설명해 봅시다

반복할 때마다 best는 지금까지 본 값 중 최댓값입니다. 첫 항목을 넣을 때 이 말이 맞고, 더 큰 값이 나오면 갱신하므로 계속 맞습니다. 모든 항목을 본 뒤에는 전체의 최댓값입니다.

이처럼 반복하는 동안 유지되는 조건을 루프 불변식이라고 합니다. 시작할 때 맞는지, 한 번 실행해도 유지되는지, 끝났을 때 원하는 결론이 나오는지 살펴봅니다. 예제 몇 개의 통과보다 넓은 근거입니다.

입력 파일과 함수는 구분하세요

알고리즘 문제는 표준 입력으로 값을 받기도 합니다. 터미널의 python3 solution.py < input.txt는 파일 내용을 표준 입력으로 보내는 리다이렉션입니다. 이 강좌에서는 핵심 절차를 보기 쉽게 함수에 작은 값을 직접 전달합니다.

확인 문제

[5, 5], [-7], []의 결과는 각각 무엇일까요? 결과 대신 최댓값의 위치를 반환하라는 요청을 받으면 무엇을 먼저 정해야 할까요?

해설 보기

결과는 5, -7, None입니다. 위치를 반환한다면 같은 최댓값이 여러 개일 때 첫 위치를 줄지, 마지막 위치를 줄지 정해야 합니다. 빈 입력의 결과도 다시 명시해야 합니다.

제품 기획, 개발 파트너 찾으시나요? 개인, 팀, 기업 모두 환영. 문제 정의부터 출시까지 함께합니다.