반응형
-문제
"틀렸습니다" 나온 이유! 자료형의 중요성!
int 범위 : -2,147,483,648~ 2,147,483,647
높이의 최대 범위가 1,000,000,000 이므로 sum은 int 범위를 넘어서는 경우가 있을 수 있음
int sum -> long long int sum으로 변경해서 해결함
자료형 관련 참고https://melonicedlatte.com/algorithm/2018/03/04/022437.html
-코드
#include<stdio.h>
#include<vector>
using namespace std;
int m;
bool cal(int h, vector<int> a)
{
long long int sum = 0;
for (int i = 0; i < a.size(); i++)
{
if (a[i] > h) sum += a[i] - h;
}
if (sum >= m) return true;
else return false;
}
int main()
{
int n, max = 0;
scanf("%d %d", &n, &m);
vector<int> a(n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (a[i] > max) max = a[i];
}
int lt = 0, rt = max, H, res =0;
while (lt<=rt)
{
H = (lt + rt) / 2;
if (cal(H, a))
{
res = H;
lt = H + 1;
}
else
{
rt = H - 1;
}
}
printf("%d", res);
return 0;
}
반응형
'이론 > 코딩테스트' 카테고리의 다른 글
[백준] 1654번 랜선자르기 (이분탐색) (0) | 2022.07.31 |
---|---|
[백준] 2751번 수 정렬하기2 (병합정렬) (0) | 2022.07.31 |
[백준] 1920번 수 찾기 (이분탐색) (0) | 2022.07.30 |
[백준] 2667번 단지번호붙이기 (BFS) (0) | 2022.07.30 |
[백준] 2178번 미로 탐색 (BFS) (0) | 2022.07.30 |