Algorithm/SW Expert Academy

[Python] 4839. 이진탐색

느낌표 공장장 2021. 9. 6. 23:26
# 페이지 몇 번만에 찾았는지 반환하는 함수
def pageSearch(total_p, goal_p):
    start = 1           # 시작페이지
    end = total_p       # 마지막 페이지
    count = 0           # 몇트만에 찾았는지

    # 시작 쪽수가 마지막 쪽수보다 크지 않는 동안 반복
    while start <= end:
        count += 1                      # 시도 +1
        middle = (start + end) // 2     # 중간 페이지 계산
        # print('goal_p', goal_p, 'start', start, 'middle', middle, 'end', end, 'count', count)

        # 중간 페이지가 목표한 페이지와 같다면 count 반환
        if middle == goal_p:
            return count
        # 중간 페이지보다 목표 페이지가 작다면 마지막 페이지를 중간 페이지로 대체
        elif goal_p < middle:
            end = middle
        # 중간페이지가 목표 페이지보다 크다면 처음 페이지를 중간 페이지로 대체
        else:
            start = middle

    return False # 못찼았을 경우 False 반환 (현재 케이스에서는 없음)


tc = int(input())

for idx in range(1, tc+1):
    # 총 페이지 수, a가 찾는 쪽 번호, b가 찾는 쪽 번호
    total_p, a_p, b_p = map(int, input().split())

    # a, b가 위의 pageSearch 함수를 이용해서 각자 찾는 쪽 번호를 몇 번만에 찾았는지 각 변수에 저장
    search_a = pageSearch(total_p, a_p)
    search_b = pageSearch(total_p, b_p)

    winner = None
    # 비겼을 경우
    if search_a == search_b:
        winner = 0
    # a가 이겼을 경우
    elif search_a < search_b:
        winner = 'A'
    # b가 이겼을 경우
    else:
        winner = 'B'
        
    print('#{} {}'.format(idx, winner))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 1213. string  (0) 2021.09.07
[Python] 4843. 특별한 탐색  (0) 2021.09.06
[Python] 4837. 부분집합의 합  (0) 2021.09.06
[Python] 4836. 색칠하기  (0) 2021.09.06
[Python] 1210. ladder1  (0) 2021.09.06