| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 알고리즘
- HANBIT Academy
- C#
- C++
- 김진홍 옮김
- 전공자를 위한 C언어 프로그래밍
- 생능출판
- 입출력과 사칙연산
- 데이터 통신과 컴퓨터 네트워크
- cyphenengine
- 박기현
- 게임 수학
- 밑바닥부터 만드는 컴퓨팅 시스템 2판
- https://insightbook.co.kr/
- unity6
- booksr.co.kr
- JavaScript
- 이득우
- 잡생각 정리글
- BOJ
- 메타버스
- The Elements of Computing Systems 2/E
- Noam Nisan
- 주우석
- 백준
- hanbit.co.kr
- (주)책만
- 일기
- C
- 이득우의 게임수학
Archives
- Today
- Total
cyphen156
백준-이분 탐색 나무 자르기 본문
N개의 나무를 잘라내어 잘라낸 나무를 합쳐 M미터를 만들어낸다.
H이상을 모두 잘라내고, 미만은 무시한다.
잘라낸 부분만 가져갈 수 있다.
필요한 만큼만 가져가야 한다.
절단기에 설정할 수 있는 최대 H를 구하라.
제약사항
- 1 <= N < 1,000,001
- 1 <= M < 2,000,000,001
- 0 <= inputValue < 1,000,000,001
주의 사항
없다.
CPP풀이
나무 자르기_2805.cpp
/**
* 백준 나무 자르기_2805
* N개의 나무를 잘라내어 잘라낸 나무를 합쳐 M미터를 만들어낸다.
* H이상을 모두 잘라내고, 미만은 무시한다.
* 잘라낸 부분만 가져갈 수 있다.
* 필요한 만큼만 가져가야 한다.
* 절단기에 설정할 수 있는 최대 H를 구하라.
*
* 제한사항
*****************************************
* 1 <= N < 1,000,001 *
* 1 <= M < 2,000,000,001 *
* 0 <= inputValue < 1,000,000,001 *
*****************************************
*
*
*
* 주의
* 없다.
*
* 풀이시간 (문제 해석 + 구현)
* 5 + 10분
*/
#include <iostream>
#include <algorithm>
static const int MAX_TREE_COUNT = 1000001;
static const int MAX_NEED_LENGTH = 2000000001;
using namespace std;
static int N, M;
static int treeHeights[MAX_TREE_COUNT] = { 0 };
static int maxHeight = 0;
void BinarySearch();
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
for (int i = 0; i < N; ++i)
{
cin >> treeHeights[i];
}
sort(treeHeights, treeHeights + N);
BinarySearch();
cout << maxHeight << '\n';
return 0;
}
void BinarySearch()
{
long long left = 0;
long long right = treeHeights[N - 1];
while (left <= right)
{
long long mid = (left + right) / 2;
long long sum = 0;
for (int i = 0; i < N; ++i)
{
if (treeHeights[i] > mid)
{
sum += treeHeights[i] - mid;
}
}
if (sum >= M)
{
maxHeight = mid;
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리에 있습니다.
Workspace/알고리듬 풀이 at main · cyphen156/Workspace
Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.
github.com
'컴퓨터공학 > 알고리듬 풀이' 카테고리의 다른 글
| 백준-이분 탐색 1300 K번째 수 (3) | 2025.08.25 |
|---|---|
| 백준-이분 탐색 2110 공유기 설치 (1) | 2025.08.25 |
| 백준-이분 탐색 1654 랜선 자르기 (1) | 2025.08.25 |
| 백준-이분 탐색 10816 숫자 카드 2 (1) | 2025.08.22 |
| 백준-이분 탐색 1920 수 찾기 (0) | 2025.08.22 |
