함께하는 데이터 분석

[이것이 코딩테스트다] 이코테 파이썬 이진 탐색 본문

코딩 테스트/이것이 코딩테스트다

[이것이 코딩테스트다] 이코테 파이썬 이진 탐색

JEONGHEON 2023. 7. 17. 15:38

부품 찾기

# 부품 찾기 (시간 초과할 수도)
N = int(input())
arr = list(map(int, input().split()))
M = int(input())
data = list(map(int, input().split()))

for i in range(len(data)) :
    if data[i] in arr :
        print('yes', end = ' ')
    else :
        print('no', end = ' ')
# 부품 찾기(이진 탐색)
def binary_search(array, target, start, end) :
    while start <= end :
        mid = (start + end) // 2
        if array[mid] == target :
            return mid
        elif array[mid] > target : # 중간점보다 target이 작으므로 왼쪽
            end = mid - 1
        else : # 중간점보다 target이 크므로 오른쪽
            start = mid + 1
    return None
    
N = int(input())
array = list(map(int, input().split()))
array.sort()
M = int(input())
data = list(map(int, input().split()))

for i in data :
    result = binary_search(array, i, 0, N - 1)
    if result != None :
        print('yes', end = ' ')
    else :
        print('no', end = ' ')

 

떡볶이 떡 만들기

# 떡볶이 떡 만들기(시간 초과)
N, M = map(int, input().split())
array = list(map(int, input().split()))
array.sort()

arr = []
for i in range(array[-1], array[0] - 1, -1) :
    sum = 0
    for j in array :
        if j >= i :
            sum += j - i
        else :
            sum += 0
    arr.append((sum, i))
    
answer = []
for i in range(len(arr)) :
    if arr[i][0] >= M :
        answer.append(i)
        
print(arr[answer[0]][1])
# 떡볶이 떡 만들기(이진 탐색)
N, M = map(int, input().split())
array = list(map(int, input().split()))
array.sort()

start = array[0]
end = array[-1]

result = 0 
while start <= end :
    summ = 0
    mid = (start + end) // 2
    for i in array :
        if i > mid :
            summ += i - mid
    if summ < M :
        end = mid - 1
    else :
        result = mid
        start = mid + 1
        
print(result)