BaekJoon10816_숫자 카드2

최효준·2022년 12월 10일
0

알고리즘 문제풀이

목록 보기
17/61

문제

풀이

우선 입력되는 배열이 굉장히 크다. 제한시간은 1초라는 걸 생각하면 정렬과 더불어 이분탐색을 사용해야 된다는 것을 알 수 있다.
저번에 푼 이코테_정렬되어있는 배열에서 특정 수의 개수 구하기에서 사용했던 파이썬의 이분탐색 라이브러리인 bisect를 사용하면 굉장히 쉽게 문제를 풀 수 있다.

정답코드

import sys
from bisect import bisect_left, bisect_right
input = sys.stdin.readline

n = int(input())
num_list = list(map(int,input().split()))
num_list.sort()
m = int(input())
check_list = list(map(int,input().split()))

answer_list = [0] * m


def find_num(arr, left, right):
    right_idx = bisect_right(arr, right)
    left_idx = bisect_left(arr,left)
    return right_idx - left_idx


for i in range(m): 
    answer_list[i] = find_num(num_list,check_list[i], check_list[i])

for i in answer_list:
    print(i, end= ' ')
profile
Not to be Number One, but to be Only One

0개의 댓글