[백준 2805] 나무 자르기

Junyoung Park·2022년 7월 18일
0

코딩테스트

목록 보기
507/631
post-thumbnail

1. 문제 설명

나무 자르기

2. 문제 분석

이분 탐색 문제. 기준이 되는 높이를 중간값으로 선정한 뒤 이 높이로 나무를 잘랐을 때 가져갈 수 있는 총 길이 total과 목표 길이 M을 비교하자. M 이상을 만족한다면 이 높이 mid를 자르는 게 허용되고, 이 중 최댓값을 찾아 기록.

3. 나의 풀이

import Foundation

let input = readLine()!.split(separator: " ").map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var trees = readLine()!.split(separator: " ").map{Int(String($0))!}
trees.sort(by: >)
var left = 0
var right = trees[0]
var answer = 0

while left <= right {
    let mid = (left + right) / 2
    var total = 0
    
    for tree in trees {
        if tree >= mid {
            total += (tree - mid)
        } else {
            break
        }
    }

    if total >= M {
        answer = max(answer, mid)
        left = mid + 1
    } else {
        right = mid - 1
    }
}

print(answer)
profile
JUST DO IT

0개의 댓글