Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그리디
- deque
- 문제풀이
- Markdown
- GarbageCollector
- 브루트포스
- 정수론
- g1gc
- 프로세스
- 백준
- 면접복기
- 적정 스레드
- 분할정복
- BFS
- 배열 돌리기1
- 그래프 탐색
- 그래프탐색
- springboot
- GC
- 이진탐색
- 구현
- 마크다운
- github
- 몬티홀
- Stack
- Greedy
- Python
- DP
- 회고
- 빌더패턴
Archives
- Today
- Total
FeelingXD
[백준- 2343] 기타레슨 🎸 본문
❓ Problem
🤔 How
- M개에 블루레이를 모든 기타 강의 동영상을 녹화하기로 했다. 그리고 블루레이는 모두 같은 크기여야한다.
- 강의 순서가 변경되면안된다.(임의로 정렬할수없으며 연속으로 블루레이에 담도록해야한다.)
위의 이유로 단순 이진탐색에서 몇가지 조건이 추가된다.
mid 값(블루레이) 으로 반환하되 임시 블루레이에 담을수있는 크기중 최소 의 값이 되도록 유지해야한다.
단! 이블루레이에는 1개의 영상만 들어갈수도있다. 난이도에비해 반례가 다양하니 신경쓰여하는 부분이 많은 문제이다.
❗ Solve
import sys
input =sys.stdin.readline
def solution():
N,M=map(int,input().split())
li=list(map(int,input().split()))
l=0
max_n=0
r=1e9
answer=float('inf')
while l<r:
cnt=1
mid=(l+r)//2+1
tmp=0
max_n=0
for v in li:
if cnt >M:
break
if tmp+v<=mid:
tmp+=v
else:
max_n=max(max_n,tmp)
cnt+=1
tmp=v
max_n=max(max_n,tmp)
if M<cnt:
l=mid+1
else:
if M>=cnt:
answer=min(answer,max_n)
r=mid-1
print(answer)
pass
if __name__=="__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[백준-2240] 자두나무 🍒 (0) | 2024.01.12 |
---|---|
[백준-1107] 리모컨 ✨ (0) | 2024.01.11 |
[백준 - 14940] 쉬운 최단거리 🐢 (0) | 2024.01.02 |
[백준 - 2293] 동전 1 🟡 (0) | 2024.01.01 |
[백준-14501] 퇴사 👀 (0) | 2023.12.30 |