Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 백준 c++ 24479번
- Unreal
- BFS
- Perforce
- 드래곤플라이트 모작
- 뱀과사다리게임
- DirectX12
- 바이토닉 수열
- 랜더링 파이프라인
- 24779
- 백준
- 백준 24444 c++
- WinAPI
- directx12 그리기 연산2
- C++
- dx12 정리
- 2d 박스충돌
- 2075번
- 백준 1260 c++
- dx12
- 그리기 연산
- 4134번
- 2565번
- 11286번
- 다음소수
- 애니메이션
- unrealengine
- lis응용
- 루트서명
- 다익스트라
Archives
- Today
- Total
game-1 님의 블로그
[백준] C++ 2805번 나무자르기 본문



풀이)
이분탐색을 이용해서 값을 가져가야할 나무의 최댓값을 찾는 문제이다.
이 문제의 경우 특정 값을 직접 찾는 것이아니며, 숫자 범위에 있기 때문에 정렬을 필요로하지않는다.
코드는 다음과 같다.
코드)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
long long getTree(vector<int>& trees, int mid) {
long long total = 0;
for (int tree : trees) {
if (tree > mid) {
total += tree - mid;
}
}
return total;
}
int main()
{
int n, m;
cin >> n >> m;
vector<int> trees(n);
for (int i = 0; i < n; ++i)
cin >> trees[i];
int low{};
int high = *max_element(trees.begin(), trees.end());
int result{};
while (low <= high){
int mid = low + (high - low) / 2;
long long wood = getTree(trees, mid);
if (wood >= m) {
result = mid;
low = mid + 1;
}
else {
high = mid - 1;
}
}
cout << result;
}
백준문제의 정답비율이 낮은 문제는 대부분이 어려운 문제보단, 이렇게 자료형의 범위를 넘어가게 만든다..
주의하자..

'백준 문제풀이' 카테고리의 다른 글
| [백준] 2565번 C++ 전깃줄 (1) | 2025.01.17 |
|---|---|
| [백준] C++ 16928번 뱀과 사다리 게임 (1) | 2025.01.16 |
| [백준] C++ 1697번:숨바꼭질 (1) | 2025.01.13 |
| [백준] C++ 11054번:가장 긴 바이토닉 부분 수열 (2) | 2025.01.10 |
| [백준] C++ 11286번:절댓값 힙 (1) | 2025.01.09 |