2022.06.01

bin1225·2022년 5월 31일
0

c++ 알고리즘

목록 보기
9/35
post-thumbnail

43. 뮤직 비디오

int main(){

	//freopen("input.txt","rt",stdin);
	
	int n,m;
	cin>>n>>m;
	
	int k, sum=0;
	vector<int> numbers;
	for(int i=0; i<n; i++){
		cin>>k;
		sum+=k;
		numbers.push_back(k);
	}
	
	int left =1, right=sum;
	int answer=sum;
	int cnt=0;
	while(left<=right){
		
		int middle = (left+right)/2;

		sum=0;
		cnt=1;
		for(int i=0; i<numbers.size();i++){
			sum+=numbers[i];
			
			
			if(sum>middle){
				cnt++;
				sum=numbers[i];
			}
		}
	
		if(cnt<=m){
			if(middle<answer){
				answer=middle;
			}
			right = middle-1;
		}
		
		if(cnt>m){
			left = middle+1;
			
		}
		
	}

	cout<<answer;
	
	return 0;
	
}

이분검색을 통해서 적합한 길이를 찾는 문제였는데, 풀고나니까 간단한데 풀이 방법을 생각 못해서 강의를 참고했다.
코드 구현 자체에서도 많이 헤매었다. 인덱스를 다루는 것에 익숙해질 필요가 있다.

2개의 댓글

comment-user-thumbnail
2022년 6월 1일

굿굿, 프로그래머스 "징검다리 건너기" 문제 추천 합니당

1개의 답글