일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
Tags
- 테를지국립공원
- 칭기즈칸
- 소프트웨어 아카데미
- 담슈타트
- 칭기스칸 동상
- 몽골 고기
- 교환학생
- SWEA
- 테를지
- ICT봉사단
- 몽골요리
- 몽골 헬스장
- 여행
- 한 줄로 서기
- 월드프렌즈
- LG글로벌챌린저
- 아부다비
- 울란바토르
- 몽골
- 월드프렌즈 ICT 봉사단
- 파이썬
- 코로나
- 알고리즘
- 초원
- 백준
- 독일
- Python
- 헬스
- 게르
- algorithm
Archives
- Today
- Total
맛있는물회
[맛있는물회] <SWEA알고리즘> 4839번 "이진 탐색" 본문
문제 조건
Input
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50
테스트 케이스 별로 책의 전체 쪽 수 P, A, B가 찾을 쪽 번호 Pa, Pb가 차례로 주어진다. 1<= P, Pa, Pb <=1000
Output
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, A, B, 0 중 하나를 출력한다.
생각한 아이디어
자료구조를 배운 사람이라면 이진탐색은 아주 간단하게 풀 수 있는 문제이다.
Search 부분에서 가장 먼저 배우며 가장 간단한 방법이다.
이진탐색은 찾고자 하는 Value 의 값을 Start, Mid, End 와 비교하며 반틈씩 잘라가며 찾는 방식이다. 찾을 때 마다 탐색 범위가 1/2 가 되므로 시간 복잡도는 T(n) = θ(log n)이다.
소스코드
T = int(input())
for TC in range(1, T+1):
P, A, B = map(int, input().split())
cntA = 0
cntB = 0
l = 1
r = P
while 1:
c = int((l+r)/2)
cntA += 1
if c == A:
break
elif c <= A:
l = c
else:
r = c
l = 1
r = P
while 1:
c = int((l+r)/2)
cntB += 1
if c == B:
break
elif c <= B:
l = c
else:
r = c
if cntA == cntB:
print("#%d %d" %(TC, 0))
elif cntA > cntB:
print("#%d %c" %(TC, 'B'))
else:
print("#%d %c" %(TC, 'A'))
*파이썬 문법 정리
'IT > 알고리즘' 카테고리의 다른 글
[맛있는물회] <SWEA알고리즘> 4864번 "문자열 비교" (0) | 2020.04.02 |
---|---|
[맛있는물회] <SWEA알고리즘> 4843번 "특별한 정렬" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4836 "색칠하기" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4828번 "min max" (0) | 2020.03.31 |
[맛있는물회] <SWEA알고리즘> 4831번 "전기 버스 " (0) | 2020.03.31 |
Comments