728x90
Key Point
이분탐색으로 해결함
left를 1으로 두고 - 걸리는 시간은 자연수 이므로
right를 풍선이 나누어 떨어지지 않고(그래서+1 해줌) 가장 느리게 부는 스태프가 다 불 경우
mid값은 시간 이므로 해당 시간을 스태프의 풍선 부는 시간으로 나누어 주며
해당 값(mid)의 최솟값을 구하는 과정이다.
# min(arr) ~ 1000000
# mid값으로 각 스태프 풍선 부는 시간을 나눈 몫의 합이 M이랑 같으면
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
arr = list(map(int, input().split()))
#1 start
left = 1
#풍선이 나누어 떨어지지 않고(그래서 +1 해줌) 가장 느리게 부는 스태프가 다 불 경우
right = (m//n+1) * max(arr)
answer = 0
while left <= right:
mid = (left + right) // 2
cnt = 0
for item in arr:
cnt += mid // item
if cnt >= m:
answer = mid
right = mid - 1
else:
left = mid + 1
print(answer)
728x90
'백준 풀이' 카테고리의 다른 글
[백준/BOJ] - 11725번 python 풀이 - DFS (0) | 2023.02.27 |
---|---|
[백준/BOJ] - 2210번 python 풀이 - DFS (0) | 2023.02.27 |
[백준/BOJ] - 9461번 python 풀이 - DP (0) | 2023.01.04 |
[백준/BOJ] - 1932번 python 풀이 - DP (0) | 2023.01.04 |
[백준/BOJ] - 2156번 python 풀이 - DP (0) | 2022.12.29 |