SWEA LIST_2 이진탐색

IngCoding·2022년 2월 24일
1

파이썬 #1 알고리즘

목록 보기
5/27

문제 출처 : SW Expert Academy

문제 - A, B에서 이진탐색 게임을 시킨다 
끝페이지(page), 각각 찾을 페이지(a,b) 를 주고 누가 먼저 찾는지?
1) 시작점과 끝점을 설정하고 중앙값을 기준으로 검색 시작  
2) 검색을 반복할 때마다 count를 증가시켜, 더 적은 쪽이 승리!

이진탐색 함수정의

# page는 끝페이지, target은 찾을 페이지 
def binary_search(page, target):
    start = 1     # 시작점 
    end = page    # 끝점
    count = 0 # 검색 수행할 때마다 +1 
    
    # 이진탐색 구현하는 while문
    while start <= end: 
        mid = int((start+end) / 2) # 중앙점
        if mid == target: 
            # 중앙점과 target 일치 -> count 리턴
            return count
        elif mid < target: # 중앙점이 타겟보다 작으면
            start = mid # 시작점을 중앙점으로 바꿈 
            count += 1 
        elif mid > target: # 중앙점이 타겟보다 크면
            end = mid  # 끝점을 중앙점으로 바꿈  
            count += 1

함수 실행

T = int(input())
for tc in range(1, T + 1):
    # 책 끝페이지, a가 찾을 페이지, b가 찾을 페이지
    page, a, b = map(int, input().split())
    
    count_a = binary_search(page, a) 
    count_b = binary_search(page, b)
    
    if count_a > count_b: 
        result = 'B'
    elif count_b > count_a:
        result = 'A'
    else:
        result = 0 
    
    print(f'#{tc} {result}')
 1
 400 300 350

#1 A
profile
Data & PM

0개의 댓글