본문 바로가기

Algorithm & Data Structure

백준 - 10816번(이진탐색)

728x90
반응형
import sys

n = int(sys.stdin.readline())
key_arr = sys.stdin.readline().strip().split()

m = int(sys.stdin.readline())
arr = sys.stdin.readline().strip().split()

key_arr.sort() #기준 배열 정렬

def binary(a,k_arr,start,end):
    if start > end:
        return 0

    m = (start + end) // 2

    if a == k_arr[m]:
        cnt = 1
        for i in range(1,m+1):
            try:
                if k_arr[m - i] == k_arr[m]:
                    cnt = cnt + 1
                else: break
            except IndexError: pass

        for i in range(1,m+1):
            try:
                if k_arr[m + i] == k_arr[m]:
                    cnt = cnt + 1
                else: break
            except IndexError: pass

        return cnt

    elif a < k_arr[m]:
        return binary(a,k_arr,start,m-1)

    else:
        return binary(a,k_arr,m+1,end)



ans = [0]*m
i = 0
for t in arr:
    s = 0
    e = len(key_arr)-1
    ans[i] = (binary(t,key_arr,s,e))
    i = i+1
print(*ans)

이진 탐색으로 실패한 코드..

 

n = int(input()) 
arr1 = list(map(int, input().split())) 
dict1 = dict() # 숫자카드와 개수를 딕셔너리에 담기 

for i in arr1: 
    if i in dict1: 
        dict1[i] += 1 
    else: 
        dict1[i] = 1 

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

for i in arr2: 
    if i in dict1: 
        print(dict1[i], end=' ')   
    else: 
        print(0, end=' ') 





딕셔너리를 이용해서 각 숫자의 개수를 미리 value 값으로 갖고 있고 입력받은 숫자가 key값에 존재할 경우 value 값을 출력해주고 그렇지 않은 경우 0을 출력한다. 찝찝하다...

728x90
반응형