-
백준 2512번 : 예산 (C 언어)c c++ 언어 공부 2023. 6. 4. 23:53
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
Code:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include <stdio.h>#include <limits.h>int main(){int n;scanf("%d", &n);long long arr[10001] = { 0, };long long sum = 0;int min = INT_MAX;int max = INT_MIN;long long result = 0;for (int i = 0; i < n; i++){scanf("%lld", &arr[i]);sum += arr[i];if (max < arr[i]){max = arr[i];}}int m;scanf("%d", &m);if (sum <= m){printf("%d", max);}else{long long first = 0;long long end = m;int flag = 0;while (first <= end){long long mid = (first + end) / 2;long long temp = 0;for (int i = 0; i < n; i++){if (arr[i] <= mid){temp += arr[i];}else{temp += mid;}}if (temp <= m){result = mid;first = mid + 1;}else{end = mid - 1;}}printf("%lld", result);}}cs 문제풀이
이분탐색을 이용해서 문제를 풀이하였다.
예산이 n개가 주어지면 예산을 모두 더한것이 m보다 작을 시 max값을 출력해주고 m보다 클 시에 이분탐색으로 상한선을 찾아준다.
first는 0으로 end는 m으로 잡아서 상한선을 찾는다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 10448번 : 유레카 이론(C 언어) (0) 2023.06.05 백준 1834번 : 나머지와 몫이 같은 수 (C 언어) (0) 2023.06.05 백준 2851번 : 슈퍼 마리오(C 언어) (0) 2023.06.02 백준 1094번 : 막대기 (C 언어) (0) 2023.06.01 백준 2947번 : 나무조각 (C 언어) (0) 2023.06.01