[백준/BOJ] 2805번 나무 자르기 (Python)

김수연·2021년 6월 22일
0

알고리즘

목록 보기
2/2
post-thumbnail

⌛ 2805번 나무 자르기

📌 문제

2805번 나무 자르기

📝 코드

이분 탐색의 대표적인 문제 중 하나다.
이 문제를 통해서 이분 탐색 문제를 어떻게 풀어야 할지 알게 되었다.

아래처럼 코드를 작성하면 PyPy3에서는 통과가 되는데, Python3에서는 시간 초과가 발생한다.

n, m = map(int, input().split())
tree_list = list(map(int, input().split()))

left = 0
right = max(tree_list)
result = []
while left <= right:
  mid = (left + right) // 2
  count = 0
  for tree in tree_list:
    if tree >= mid:
      count += tree - mid

  if count == m:
    result.append(mid)
    break
  elif count > m:
    result.append(mid)
    left = mid + 1
  else:
    right = mid - 1

print(max(result))

자른 나무 길이의 합을 구하는 방식을 아래처럼 바꿔주면 Python3에서도 통과가 가능하다.

n, m = map(int, input().split())
tree_list = list(map(int, input().split()))

left = 0
right = max(tree_list)
result = []
while left <= right:
  mid = (left + right) // 2
  count = 0
  count = sum(tree - mid if tree >= mid else 0 for tree in tree_list)

  if count == m:
    result.append(mid)
    break
  elif count > m:
    result.append(mid)
    left = mid + 1
  else:
    right = mid - 1

print(max(result))

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN