반응형
이진탐색 문제
- 입력 받아야 할 값과 데이터가 크기 때문에 이진탐색을 고려하였다.
- 입력 값을 빠르게 받기위해 sys.stdin.readline().rstrip() 함수를 사용한다.
- 시간 초과가 날 경우 pypy를 이용한다.
- 예 아니오로 나눌 수 있는 파라메틱 서치 문제는 재귀적으로 하는 것보다 반복문으로 푸는 것이 더 깔끔하다.
# 예 아니오로 나눌 수 있는 파라메틱 서치 문제는 재귀적으로 하는 것보다 반복문으로 푸는 것이 더 깔끔하다.
import sys
n , m = list(map(int,sys.stdin.readline().rstrip().split())) # 나무 개수 n, 필요한 나무 길이 m
array = list(map(int,sys.stdin.readline().rstrip().split()))
# 이진 탐색을 위한 시작점과 끝점 설정
start = 0
end = max(array)
# 이진 탐색 수행(반복적)
answer = 0
while start <= end:
remain = 0
mid = (start + end) // 2 # 10
for x in array:
# 잘랐을 때의 남은 나무길이 계산
if x > mid:
remain += x - mid
if remain < m: # 목표값 보다 모자르니 더많이 자르기
end = mid - 1
else: # 충분할 경우 덜 짜르기
answer = mid # 최대한 덜 잘랐을 때가 정답이므로, 여기에 result에 기록
start = mid + 1
print(answer)
스케치
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 균형잡힌 세상 4949 (파이썬) (0) | 2021.03.10 |
---|---|
[백준] 회전하는 큐 1021 (파이썬) (0) | 2021.03.10 |
[백준] 좌표 정렬하기2 11651 (파이썬) (0) | 2021.03.09 |
[백준] [재귀 분석 추가] 하노이의 탑 이동 순서 1759 (파이썬) (2) | 2021.03.08 |
[백준] 암호 만들기 1759 (파이썬) (0) | 2021.03.08 |