본문 바로가기
백준

숫자 카드 - 10815번

by 청원뿔세포 2022. 9. 17.

몇일 전에 풀었던 숫자카드 2와 같은 코드를 사용했다

마찬가지로 해시맵을 사용하면 시간초과가 안뜨는데 이분탐색을 사용하니 시간초과가 떴다.

# 해시 맵을 사용하여 푼 코드, 이진탐색에 비해 더 간단한 느낌이 든다...
n = int(input())
n_arr = list(map(int, input().split()))
m = int(input())
m_arr = list(map(int, input().split()))

result = []
dict = {}


for i in n_arr:
    if i in dict:
        dict[i] +=1
    else:
        dict[i] = 1

for i in m_arr:
    if i in dict:
        print(dict[i],end=' ')
    else:
# 이진탐색을 이용하여 푼 코드, 시간초과가 뜨지만 답은 잘 나온다. 파이썬만의 문제인가???
n = int(input())
n_arr = list(map(int, input().split()))
m = int(input())
m_arr = list(map(int, input().split()))

n_set = list(set(n_arr))

# 이분탐색 함수
def bin_search(target, arr):
    arr.sort()
    start = 0
    end = len(arr)-1

    while start <= end:
        mid = (start+end)//2

        if arr[mid] == target:
            return mid
        elif arr[mid]>target:
            end = mid-1
        else:
            start = mid+1
    return None

for i in m_arr:
  res = bin_search(i, n_set)
  if res != None:
    print(n_arr.count(i),end=' ')
  else:
    print(0,end=' ')

'백준' 카테고리의 다른 글

A와 B - 12904번  (0) 2022.09.19
스택 - 10828번  (0) 2022.09.18
숫자 카드 2 - 10816번  (0) 2022.09.16
수 찾기 - 1920번  (0) 2022.09.15
A → B - 16953번  (0) 2022.09.14

댓글