우선 입력되는 배열이 굉장히 크다. 제한시간은 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= ' ')