반응형
문제
https://www.acmicpc.net/problem/2343
문제 풀이
이분탐색으로 찾을 값 : 블루레이의 길이
블루레이의 길이를 바꿔가며 그 길이로 나눴을 때
group의 수가 M개 초과면 블루레이 길이를 더 길게
M개 이하면 블루레이 길이를 더 작게
코드
import sys
input = sys.stdin.readline
import bisect
N, M = map(int,input().split())
video_list = list(map(int,input().split()))
def count(video_list, video_leng):
cnt = 1
tmp = 0
for i in range(len(video_list)):
if tmp + video_list[i] > video_leng:
tmp = 0
cnt += 1
tmp += video_list[i]
return cnt
# 블루레이의 크기를 탐색
def binary_search(LIST):
s = max(video_list) # 블루레이 크기가 최소한 max(video_list)는 되야 group이 나눠짐
e = sum(video_list) # 블루레이 크기가 sum(video_list)면 group이 한 덩어리로 나뉨
res = 0
while s<=e:
mid = (s+e)//2
video_cnt = count(video_list,mid) # mid(블루레이 크기)에 따른 group 수
if video_cnt > M:
s = mid + 1
else:
e = mid - 1
res = mid
return res
print(binary_search(video_list))
반응형
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[boj] 백준 15651 N과 M (3) python 풀이 (0) | 2023.08.03 |
---|---|
[boj] 백준 15666 N과 M (12) python 풀이 (0) | 2023.08.03 |
[boj] 백준 14716 현수막 python 풀이 (0) | 2023.07.31 |
[boj] 백준 13549 숨바꼭질 3 python 풀이(bfs) (0) | 2023.07.29 |
[boj] 백준 2583 영역 구하기 python 풀이(bfs) (0) | 2023.07.28 |