문제 설명
링크
문제 풀이
- 이진탐색 알고리즘을 넣어준다.
- a, b 각각의 탐색 횟수를 cnt_a, cnt_b 에 넣어준다.
- a, b 모두 탐색이 완료된 경우 반복문을 빠져나간다.
- 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}')