4839 - 이진탐색

박재현·2022년 2월 15일
0

알고리즘 부수기

목록 보기
21/43
post-thumbnail

문제 설명

링크

문제 풀이

  1. 이진탐색 알고리즘을 넣어준다.
  2. a, b 각각의 탐색 횟수를 cnt_a, cnt_b 에 넣어준다.
  3. a, b 모두 탐색이 완료된 경우 반복문을 빠져나간다.
  4. cnt_a, cnt_b 의 값을 비교한 후 cnt_a < cnt_b 이면 "A"를, cnt_a > cnt_b 이면 "B"를, cnt_a == cnt_b 이면 "0"을 출력한다.

코드

T = int(input())
for tc in range(1, T+1):
    P, p_a, p_b = map(int, input().split())
    cnt_a = cnt_b = 0
    a_l = b_l = 0
    a_r = b_r = P
    result = ""

    for i in range(P):
        if (a_l + a_r) // 2 != p_a:
            if (a_l + a_r) // 2 > p_a:
                a_r = (a_r + a_l) // 2
                cnt_a += 1
            if (a_l + a_r) // 2 < p_a:
                a_l = (a_r + a_l) // 2
                cnt_a += 1
        if (b_l + b_r) // 2 != p_b:
            if (b_l + b_r) // 2 > p_b:
                b_r = (b_r + b_l) // 2
                cnt_b += 1
            if (b_l + b_r) // 2 < p_b:
                b_l = (b_r + b_l) // 2
                cnt_b += 1
        if (a_l + a_r) // 2 == p_a and (b_l + b_r) // 2 == p_b:
            break


    if cnt_a == cnt_b:
        result = "0"
    else:
        result = "A" if cnt_a < cnt_b else "B"
    print(f'#{tc} {result}')
profile
공동의 성장을 추구하는 개발자

0개의 댓글