더북(TheBook)

# weigh( ) 함수(저울질)를 이용하여

# left에서 right까지에 놓인 가짜 동전의 위치를 찾아냄

def find_fakecoin(left, right):

    # 종료 조건: 가짜 동전이 있을 범위 안에 동전이 한 개뿐이면 그 동전이 가짜 동전임

    if left = = right:

        return left

    # left에서 right까지에 놓인 동전을 두 그룹(g1_left~g1_right, g2_left~g2_right)으로 나눔

    # 동전 수가 홀수면 두 그룹으로 나누고 한 개가 남음

    half = (right - left + 1) // 2

    g1_left = left

    g1_right = left + half - 1

    g2_left = left + half

    g2_right = g2_left + half - 1

    # 나눠진 두 그룹을 weigh( ) 함수를 이용하여 저울질함

    result = weigh(g1_left, g1_right, g2_left, g2_right)

    if result = = -1: # 그룹 1이 가벼움(가짜 동전이 이 그룹에 있음)

        # 그룹 1 범위를 재귀 호출로 다시 조사

        return find_fakecoin(g1_left, g1_right)

    elif result = = 1: # 그룹 2가 가벼움(가짜 동전이 이 그룹에 있음)

        # 그룹 2 범위를 재귀 호출로 다시 조사

        return find_fakecoin(g2_left, g2_right)

    else: # 두 그룹의 무게가 같으면(나뉜 두 그룹 안에 가짜 동전이 없다면)

       return right # 두 그룹으로 나뉘지 않고 남은 나머지 한 개의 동전이 가짜 동전임

 

n = 100    # 전체 동전 개수

print(find_fakecoin(0, n - 1))

 

icon_result 실행 결과

 

29

 

 

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