백준
# 2805: 나무 자르기
bright_code
2020. 10. 5. 17:08
728x90
반응형
# 시간초과
n, m = map(int,input().split()) # 나무의 수, 필요한 길이
trees = list(map(int,input().split()))
h = max(trees)
for i in range(h,0,-1):
total = 0
for j in trees:
if i < j :
total += j-i
if total >= m :
print(i)
break
문제에서 나무의 최대값 이 매우 크게 잡혀 있는 것을 볼 수 있다.
이렇게 그냥 풀면 당연히 시간초과가 나온다.
# 정답
n, m = map(int,input().split()) # 나무의 수, 필요한 길이
trees = list(map(int, input().split()))
start, end = 1, max(trees)
while start <= end:
mid = (start+end) // 2
result = 0
for i in trees:
if i >= mid:
result += i - mid
if result >= m:
start = mid + 1
else:
end = mid - 1
print(end)
이분탐색을 적용하여 시간을 줄여야 한다.
python3 로는 계속 시간초과 오류가 나서 pypy3 로 제출했다 : (
728x90
반응형