본문 바로가기
한국으로/알고리즘 문제풀이

[문제풀이] 2512번: 예산

by 영킴. 2018. 7. 5.

[문제풀이] 2512번: 예산



문제유형

이진탐색


Solution

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
 
int N;
long long M;    //총예산
int yesan[10010];
int max;
 
void inputData()
{
    scanf("%d"&N);
    for (register int i = 0; i < N; i++)
    {
        scanf("%d"&yesan[i]);
        if (max < yesan[i]) max = yesan[i];
    }
    scanf("%lld"&M);
}
 
int check(int target)
{
    long long sum = 0;
    for (register int i = 0; i < N; i++)
    {
        if (yesan[i] > target) sum += target;
        else sum += yesan[i];
    }
    
    if (sum <= M) return 1;
    return 0;
}
 
int binarySearch()
{
    int start, end, target;
    start = 0;
    end = max;
    int sol = 0;
    
    while (start <= end)
    { 
        target = (start + end/ 2;
 
        if (check(target))
        {
            sol = target;
            start = target + 1;
        }
        else
        {
            end = target - 1
        }
    }
    return sol;
}
 
int main()
{
    inputData();
    printf("%d\n", binarySearch());
 
    return 0;
}
cs