BOJ 2343 | 기타 레슨

전승민·2023년 4월 17일
1

BOJ 기록

목록 보기
1/68

Parametric Search를 사용하여 푸는 문제이다.

처음에는 녹화되는 강의는 연속적이어야 한다는 조건을 못 보고 그리디하게 풀면 안 되는 문제인 줄 알았는데 사실 쉬운 문제였다.

가능한 블루레이 크기 중 최소이고, F~T 분포인 결정 문제이다.

lower_bound() 쓰면 간단하지만 그래도 직접 check() 함수를 구현해서 풀어보았다.

#include <bits/stdc++.h>
using namespace std;

int N, M;
vector<int> lecture;

bool check(int len){
	int box = 0;
	int cnt = 1;
	for (auto i : lecture){
		
		if (i > len){ // 현재 box가 감당할 수 없는 element가 있을 때
			return false;
		}
		
		if (box + i <= len){
			box += i;
		} else{ // new box
			box = i;
			cnt++;
		}
	}
	
	if (cnt <= M)
		return true;
	else return false;
}

int main(){
	
	cin >> N >> M;
	for (int i = 0; i < N; i++){
		int t; cin >> t;
		lecture.push_back(t);
	}
	
	int lo = 0;
	int hi = 1e9+1;
	
	while (lo + 1 < hi) {
		int mid = (lo+hi)/2;
		if (check(mid)) hi = mid;
		else lo = mid;
	}
	
	cout << hi;
	
}

lecture의 원소가 mid 값보다 큰 경우를 생각하지 않아 한 번 틀렸다.
실수를 줄이는 것이 항상 어렵다.

profile
알고리즘 공부한거 끄적이는 곳

0개의 댓글