-
문제
https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
How to Solve ?
function solve(trees, N, M) { trees.sort((a, b) => a - b); // 오름차순 정렬 const target = M; let start = trees[0]; // 제일 작은 나무 let end = trees[N - 1]; // 제일 큰 나무 while (start <= end) { let mid = Math.floor((start + end) / 2); // 중간 크기 let log = 0; for (let i = 0; i < trees.length; i++) { if (mid > trees[i]) { // 벌목 크기보다 작으면 패스 continue; } log += trees[i] - mid; // 잘린 나무의 길이 } if (log >= target) { start = mid + 1; } else { end = mid - 1; } } return end; } let [N, M] = [4, 7]; const trees = [20, 15, 10, 17]; console.log(solve(trees, N, M));
'PS > 백준' 카테고리의 다른 글
[백준_1182] 부분 수열의 합 ( dfs - 자바스크립트 ) (0) 2021.06.09 [백준_2018] 수들의 합5 ( 투포인터 - 자바스크립트) (0) 2021.06.09 [백준_11659] 구간 합 구하기 4 ( 자바스크립트 ) (0) 2021.06.09 [백준_1018] 체스판 다시 칠하기 (완전탐색 - 자바스크립트) (0) 2021.06.09 [ 백준 _ 6588 ] 골드바흐의 추측 ( 수학 - 자바스크립트 ) (1) 2021.06.06 댓글