728x90
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
#include <stdio.h> // 예산
int binary_search(int low, int high, int*arr, int n, int m)
{
int sum;
int mid = (low + high) / 2;
while (high >= low)
{
sum = 0;
mid = (high + low) / 2;
for (int i = 0; i < n; i++)
{
if (arr[i] > mid)
{
sum += mid;
}
else
{
sum += arr[i];
}
}
if (sum == m)
{
return mid;
}
else if (sum > m)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
mid = (low + high) / 2;
}
return mid;
}
int main()
{
int n;
scanf("%d", &n);
int arr[10000], max = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
if (arr[i] > max)
max = arr[i];
}
int m;
scanf("%d", &m);
printf("%d", binary_search(0, max, arr, n, m));
return 0;
}
MEMO
-- 일반적인 인덱스의 값을 left, right로 설정해서 수를 찾아내는 경우와는 다르게 실제 값을 사용해서 이진탐색을 구현하는 경우가 새로운 느낌
-- 변수 mid == 상한액으로 생각하면 쉽게 이해가 된다
!! 더 다양한 문제 풀어보기 !!
728x90
728x90
'백준[baekjoon] > C언어' 카테고리의 다른 글
백준(baekjoon) [C] - 2075번: N번째 큰 수 (0) | 2023.02.04 |
---|---|
백준(baekjoon) [C] - 11652번: 카드 (0) | 2023.02.04 |
백준(baekjoon) [C] - 2504번: 괄호의 값 (0) | 2023.02.01 |
백준(baekjoon) [C] - 1012번: 유기농 배추 (0) | 2023.02.01 |
백준(baekjoon) [C] - 1302번: 베스트셀러 (0) | 2023.01.31 |