난이도 : D2
문제번호 : 4839
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
코딩반 학생들에게 이진 탐색을 설명하던 선생님은 이진탐색을 연습할 수 있는 게임을 시켜 보기로 했다. 책의 전체 쪽수와 두 사람이 찾을 쪽 번호가 주어졌을 때, 이진 탐색 게임에서 이긴 사람이 누구인지 알아내 출력하시오. 비긴 경우는 0을 출력한다. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50 테스트 케이스 별로 책의 전체 쪽 수 P, A, B가 찾을 쪽 번호 Pa, Pb가 차례로 주어진다. 1<= P, Pa, Pb <=1000 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, A, B, 0 중 하나를 출력한다. |
예시
입력 | 출력 |
3 |
#1 A #2 0 #3 A |
2. 문제풀이
이진탐색을 연습하는 문제였다. (파이썬 2일차 문제) 간단하게 목표까지 찾는횟수를 리턴하는 이진탐색하는 함수를 만들어 풀었다. 찾는값이 중간값보다 크다면 시작값을 중간값으로 대체하고 작다면 끝값을 중간값으로 바꾸며 계산하였다. 나중에 찾은 횟수를 비교하여 결과를 리턴하면 끝이난다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#D2 4839 이진탐색
def binaryserch(p, key):
start = 1
end = p
count = 0
while start <= end:
index = (start+end) // 2
count += 1
if index == key:
return count
elif index < key:
start = index
elif index > key:
end = index
return -1
T = int(input())
for t in range(1, T+1):
p, a, b = map(int, input().split())
a_c = binaryserch(p, a)
b_c = binaryserch(p, b)
result = ''
if a_c < b_c:
result = 'A'
elif a_c > b_c :
result = 'B'
else:
result = '0'
print("#{} {}".format(t, result))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
회문 Python(SW Expert Academy) (0) | 2020.03.02 |
---|---|
특별한정렬 Python(SW Expert Academy) (0) | 2020.03.01 |
부분 집합의 합 Python(SW Expert Academy) (0) | 2020.02.28 |
색칠하기 Python(SW Expert Academy) (0) | 2020.02.27 |
min, max Python(SW Expert Academy) (0) | 2020.02.26 |
댓글