# 이분탐색
# 실수 했던 점
입력이 4 120 110 140 150 900 이라면 150이 들어와야 한다.
음..... 문제를 너무 대충읽었나부다..
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #define MAX 100005 #define INF 987654321 #define MOD 31991 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef pair<int, int> pi; int n, m, arr[MAX]; int fun(int mx) { int sum=0; for(int i=0;i<n;i++) { if(arr[i]<mx) sum+=arr[i]; else sum+=mx; if(sum>m) return -1; // 국가 총 예산 금액을 넘은 경우 -1로 리턴 } return sum; } // 상한액이 mx일때 결과값 int main() { int l=0,r=100000,mid=0,ans=0,mem=-1; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&arr[i]); mid+=arr[i]; ans=max(ans,arr[i]); } scanf("%d",&m); if(mid<=m) { printf("%d",ans); return 0; } // 이 문제에서 가장 주의해야할 부분.... // 만약 4 120 110 140 150 900 이라면 답은 150이 되야한다. while(l<r) { mid=(l+r)/2; int ret = fun(mid); if(ret==-1) r=mid; else { if(mem<ret) mem=ret,ans=mid; l=mid+1; } } printf("%d",ans); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 1275 커피숍2 ** (0) | 2018.09.28 |
---|---|
백준(BOJ) 2042 구간 합 구하기 ** (0) | 2018.09.17 |
백준(BOJ) 4526 트리 * (0) | 2018.09.08 |
백준(BOJ) 11067 피타고라스 기대값 * (0) | 2018.08.21 |
백준(BOJ) 10250 ACM 호텔 * (0) | 2018.08.21 |