[이코테] 이진 탐색 : 떡볶이 떡
문제
적어도 M만큼의 떡을 가져가기위해 설정할 수 있는 최대 높이를 구하는 문제
- 이진 탐색 문제
✍️ 나의 풀이
- 순차탐색은 말도 안되게 오래 걸린다.
- 따라서, 이진 탐색을 통해 M보다 적은 떡이면 높이를 낮춰 자르고 M보다 많은 떡이면 높이를 높혀 최대 높이를 구하도록 한다.
🛠 나의 코드
n, m = map(int, input().split())
height = list(map(int, input().split()))
height.sort(reverse=True)
end = height[0]
start = 0
mx = -1
while start <= end:
inspection = (start + end) // 2
sm = 0
for h in height:
if h > inspection:
sm += (h - inspection)
if sm >= m:
start = inspection + 1
mx = max(mx, inspection)
elif sm < m:
end = inspection - 1
print(mx)
📝 정리
이진 탐색
-> 새로운 start와 end 설정 시 +1, -1을 해줘야 한다. 또한 이진 탐색의 종료조건은start <= end
🎈 참고
Author And Source
이 문제에 관하여([이코테] 이진 탐색 : 떡볶이 떡), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@pyh8618/이코테-이진-탐색-떡볶이-떡저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)