문제
https://www.acmicpc.net/problem/17951
알고리즘
매개변수탐색
풀이
구간을 나눌 기준을 매개변수로 두고, 그 기준보다 커지면 그룹으로 나누는 방식으로 진행하면 된다.
그룹의 개수가 많다면 기준치를 높여서 줄이는 방향으로, 적다면 기준치를 낮춰서 늘리는 방향으로 진행한다 생각하면 조금 편하다.
코드
inf=10**10
def solve():
n,k=map(int,input().split())
arr=list(map(int,input().split()))
ans=parametric_search(n,k,arr)
print(ans)
def parametric_search(n,k,arr):
mn=0
mx=inf
ans=0
while mn<=mx:
mid=(mn+mx)//2
cnt,res=check(mid,arr)
if cnt>=k:
ans=max(res,ans)
mn=mid+1
else:
mx=mid-1
return ans
def check(mid,arr):
nowsum=0
res=inf
groupcnt=0
for i in arr:
nowsum+=i
if mid<=nowsum:
res=min(res,nowsum)
groupcnt+=1
nowsum=0
return groupcnt,res
solve()
'Koala - 18기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/python] 2164: 카드2 (0) | 2025.05.04 |
---|---|
[백준/C++] 2616번: 소형기관차 (0) | 2025.04.13 |
[백준/python] 8911: 거북이 (0) | 2025.04.06 |
[백준 / Python] 7453 합이 0인 네 정수 (0) | 2025.04.06 |
[백준/C++] 2688번: 줄어들지 않아 (0) | 2025.03.30 |