bisect라이브 러리로 이진탐색을 구현하지 않고 사용해 보자

예시

Nums = [0,1,2,3,4,5,6,7,8,9,10,12,13]

bitsect_left(nums,3)

⇒ 결과 : 3

nums 배열에 3를 삽입할 위치를 리턴합니다. 3가 존재할 경우 4의 왼쪽 인덱스를 반환합니다.

bitsect_right(nums,3)

⇒ 결과 : 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])

엄청나게 깔끔하게 문제를 풀 수 있다.