bisect라이브 러리로 이진탐색을 구현하지 않고 사용해 보자
Nums = [0,1,2,3,4,5,6,7,8,9,10,12,13]
⇒ 결과 : 3
nums 배열에 3를 삽입할 위치를 리턴합니다. 3가 존재할 경우 4의 왼쪽 인덱스를 반환합니다.
⇒ 결과 : 4
nums 배열의 3를 삽입할 위치를 리턴합니다. 3이 존재할 경우 3의 다음 인덱스 리턴
import bisect
nums = [0,1,2,3,4,5,6,7,8,9,10,12,13]
print(bisect.bisect_left(nums,0))
print(bisect.bisect_right(nums,0))
print(bisect.bisect_left(nums,3))
print(bisect.bisect_right(nums,3))
print(bisect.bisect(nums,3))
print(bisect.bisect_left(nums,11))
print(bisect.bisect_right(nums,12))
print(bisect.bisect_left(nums,13))
print(bisect.bisect_right(nums,13))
"""
0
1
3
4
4
11
12
12
13
"""
예시문제)
https://www.acmicpc.net/problem/19637
import sys
import bisect
n,m = map(int,sys.stdin.readline().split())
name = []
power = []
for i in range(n):
nm,p = map(str,sys.stdin.readline().split())
name.append(nm)
power.append(int(p))
for i in range(m):
p = int(sys.stdin.readline())
idx = bisect.bisect_left(power,p)
print(name[idx])
엄청나게 깔끔하게 문제를 풀 수 있다.