728x90
https://www.acmicpc.net/problem/1654
오늘부터 이분탐색 문제를 풀기 시작했다.
이분탐색 알고리즘은 간단하다. 찾고자 하는 값을 정렬시킨다음에(여기서는 자르려는 길이이므로 정렬할 필요가 없음)
- 제일 큰값 제일 작은값의 중간을 탐색.
- 그것보다 크냐 작냐를 가지고
- 최댓값 또는 최솟값을 중간+-1을 시킨후
- 1~3 반복해서 더이상 진행이 안될때까지 반복.
문제의 조건에 따라 ispossible (len의 길이로 자를 때 N또는 그 이상의 len짜리 조각이 나오느냐를 리턴) 함수를 만들었다.
중간에 한번 안된 적이 있는데, 이분탐색을 진행할때 mid의 값에 +-1을 해줘야 다음 값으로 넘어가면서 진행이 가능하다. 안할시 자칫하다간 무한루프에 빠져버린다..
코드
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
32
33
34
35
36
37
38
39
40
|
#include <iostream>
using namespace std;
long long lan[10001];
int K,N;
bool ispossible(long long len){
int count=0;
for(int i=0; i<K;i++){
count+=lan[i]/len;
}
if (count>=N)
return true;
else
return false;
}
int main(void){
cin>>K>>N;
long long high=0;
for(int i=0; i<K; i++) {
cin >> lan[i];
high=max(high,lan[i]);
}
long long result=0;
long long low=1;
while(low<=high){
long long mid = (low+high)/2;
if(ispossible(mid)){
if(result<mid)
result=mid;
low=mid+1;
}
else{
high=mid-1;
}
}
cout<<result;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 2110 공유기 설치 - 이분탐색 C++ (0) | 2020.01.22 |
---|---|
백준 2805 나무자르기 - 이분탐색 C++ (미완) (0) | 2020.01.22 |
백준 9663 N-Queen (백트래킹(가지치기), 재귀함수) - C++ (0) | 2020.01.22 |
백준 9012 괄호 (문자열)- C++ (0) | 2020.01.20 |
백준 1931 회의실 배정-greedy algorithm(C++) (0) | 2020.01.15 |