Hits

안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.


코드는 이곳을 참고했음을 밝힙니다.


1. Binary Search

백준 1920번

https://www.acmicpc.net/problem/1920

N = int(input())
A = list(map(int, input().split()))
A.sort()
M = int(input())
target_list = list(map(int, input().split()))

for i in range(M):
    find = False
    target = target_list[i]
    start = 0
    end = len(A) - 1
    while start <= end:
        midi = int((start+end)/2)
        midv = A[midi]
        if midv > target:
            end = midi - 1
        elif midv < target:
            start = midi + 1
        else:
            find = True
            break
            
    if find:
        print(1)
    else:
        print(0)


백준 2343번

https://www.acmicpc.net/problem/2343

N, M = map(int, input().split())
A = list(map(int, input().split()))
start = 0
end = 0

for i in A:
    if start < i:
        start = i
    end += i
    
while start <= end:
    middle = int((start+end)/2)
    sum = 0
    count = 0
    for i in range(N):
        if sum + A[i] > middle:
            count += 1
            sum = 0
        sum += A[i]
    if sum != 0:
        count += 1
    if count > M:
        start = middle+1
    else:
        end = middle -1
        
print(start)


백준 1300번

https://www.acmicpc.net/problem/1300

N = int(input())
K = int(input())
start = 1
end = K
ans = 0

while start <= end:
    middle = int((start + end) / 2)
    cnt = 0

    for i in range(1, N + 1):
        cnt += min(int(middle / i), N)
    if cnt < K:
        start = middle + 1
    else:
        ans = middle
        end = middle - 1
print(ans)


지금까지 백준 알고리즘 이진 탐색 부분이었습니다.

읽어주셔서 감사합니다. 😃