import sys

def input():
    return sys.stdin.readline().rstrip()


def count_group(val):
    k = 0
    temp = 0
    for ind in range(N):
        temp += arr[ind]
        if temp>=val:
            k += 1
            temp = 0
    return k


N,K = map(int,input().split())

arr = list(map(int,input().split())) 


left = 0
right = sum(arr)+1

while left+1<right:
    mid = (left+right)//2
    K_mid = count_group(mid)
    if K_mid >= K:
        left = mid
    else:
        right = mid
print(left)

 원래 잘 못푸는 이분탐색 문제라서 오래걸렸던 문제였다.

 

이 문제에서 구해야할 것은 최소의 최대값이다.

 

즉 여기서 mid의 값이 의미하는 것은 해당 시험 문제지의 최소 점수인것이다.

 

즉 이 최소 점수가 넘어가면, 그룹을 나누는것이다.

 

이렇게 나눈 최소 점수를 기준으로 시험지를 나눴을때의 그룹의 수가  K개 미만이 되면 False K개 이상이 되면 True로 하고

 

우리는 K개 이상의 가장 마지막 값을 구하고 싶은 것이므로, left를 출력해주면 된다.

 

이 문제 덕분에 이분탐색에 대해서 감을 잡게 되었고,

 

찾고 싶은 값이 있을때 어떻게 나눠야할지 대략 감을 잡았다.

 

아직 부족하지만, 어떻게 나눠야할지 알게 되었다.

 

 

https://blog.naver.com/jinhan814/222156334908

 

이분 탐색, 파라메트릭 서치 안 헷갈리는 TIP

예전에 종만북을 읽으면서 아래 글을 쓴 적이 있습니다. 아래 글에는 반복문 불변식을 이용해 lower_bound,...

blog.naver.com

 

https://blog.naver.com/jinhan814/222135038870

 

[종만북] 이분 탐색의 구현, 정당성 증명(반복문 불변식)

이분 탐색이란 탐색 범위를 절반으로 줄여가면서 찾는 탐색 기법으로, c++ STL의 lower_bound, upper_bo...

blog.naver.com

 

https://eine.tistory.com/entry/%EC%9D%B4%EC%A7%84-%ED%83%90%EC%83%89-%EC%9D%B4%EB%B6%84-%ED%83%90%EC%83%89binary-search-%EA%B5%AC%ED%98%84%EC%8B%9C-%EA%B3%A0%EB%A0%A4%ED%95%A0-%EA%B2%83%EB%93%A4

 

이진 탐색, 이분 탐색(binary search) 구현시 고려할 것들

binary search 알고리즘은 번역해서 이진 탐색이라고도 부르고, 이분 탐색이라고도 부른다. 사실 컴퓨터공학을 전공하면, 자료구조 과목을 배울 때 배우는 탐색 알고리즘 중 하나로, 정말 유명하고

eine.tistory.com

 

https://blog.naver.com/kks227/220777333252

 

이분 탐색(Binary Search) (수정 2019-02-15)

안녕하세요. 블로그 점검이 새벽 1시부터 시작되어서 아쉽게도 개삘인 오늘 달릴 수가 없네요. 하지만 반드...

blog.naver.com

 

풀면서 참조한 블로그들이다. 이분탐색에 대해 잘 설명을 해놓은 블로그이니 추천을 드린다.

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ/백준] 1944 복제 로봇  (0) 2021.07.31
[BOJ/백준] 16724 피리 부는 사나이  (0) 2021.07.15
[BOJ/백준] 16571 알파 틱택토  (0) 2021.07.12
[BOJ/백준] 16437 양 구출 작전  (0) 2021.07.12
[BOJ/백준] 13711 LCS 4  (0) 2021.07.12

+ Recent posts