Search
Duplicate
📒

나무 자르기

주차
14
문제번호
2805
언어
티어
실버
유형
이분탐색
nj_Blog
nj_상태
이해도
66%
풀이
사람
이해도 2
13 more properties

문제접근

놓쳤던 부분

sum값을 초기화하지 않아서 sum이 계속적으로 누적되는 문제가 있었음
start의 부분을 입력받은 값의 최소값으로 설정하게 되면 일부 케이스에 대해서 잘못된 값을 출력하게 됨
→ start를 0으로 시작해야함
→ 최소값으로 설정해서 하는 경우보다 0부터 시작하는게 더 효율적임

코드

9832 KB

176 ms

#include <iostream> #include <vector> #include <algorithm> int n,m; std::vector<long long> tree; void input_setting() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::cin >> n >> m; tree.resize(n); for (int i = 0; i < n; i++) std::cin >> tree[i]; } void solution() { int start; int end; int mid; long long sum; int result; start = 0; end = *std::max_element(tree.begin(), tree.end()); while (start <= end) { sum = 0; mid = (start + end) / 2; for (int i = 0; i < n; i++) if (tree[i] - mid > 0) sum += (tree[i] - mid); if (sum >= m) { start = mid + 1; result = mid; } else end = mid - 1; } std::cout << result; } int main(void) { input_setting(); input(); solution(); return (0); }
C++
복사