10816 : 숫자 카드 2

서희찬·2022년 1월 25일
0

백준

목록 보기
97/105

문제

코드

from bisect import bisect_left, bisect_right 

def findRange(a,left_value,right_value):
    right_idx = bisect_right(a,right_value)
    left_idx = bisect_left(a,left_value)
    return right_idx - left_idx 

n = int(input())
arr1 = list(map(int,input().split())) 
arr1.sort()
m = int(input())
arr2 = list(map(int,input().split())) 

for find in arr2:
    print(findRange(arr1,find,find),end=" ")

해설

이진탐색을 어떻게 사용해야할지 감이 안잡혀 풀지 못한 문제였다
그런데.. bisect_left,right를 배우고 이진 탐색으로 수의 범위 사이에 있는수의 갯수를 찾거나 같은 수의 갯수를 찾을 수 있는 것을 알아내서 적용해보니 풀렸다
뿌듯뿌듯-!

바이색섹를 이용한 이진 탐색을 통해 내가 찾는값의 가장왼쪽 인덱스와 가장 오른쪽 인덱스를 빼주면 찾는 값의 개수를 반환해주게 findRange함수를 짜줬다

profile
Carnegie Mellon University Robotics Institute | Research Associate | Developing For Our Lives, 세상에 기여하는 삶을 살고자 개발하고 있습니다

0개의 댓글

관련 채용 정보