[8/23] 이코테 이진탐색
2. 부품 찾기
너무 쉬워서 생략
3. 떡볶이 떡 만들기
202
내 코드
def dduck(array, target, start, end):
while (start <= end):
mid = (start + end) // 2
ssum = 0
for i in array:
if ( i > mid ):
temp = i - mid
ssum += temp
# 떡이 m 미만일 경우
if ( ssum < target ):
end = mid - 1
# 떡이 m과 같거나 초과
else:
result = mid
start = mid + 1
return result
n, m = map(int, input().split())
arr = list(map(int, input().split()))
answer = dduck(arr, m, 0, max(arr))
print(answer)
로직
- 어려웠다.
- 절단기 높이를 0부터 가장 긴 떡의 길이 사이로 잡는 것이 중요한 포인트
<27> 정렬된 배열에서 특정 수의 개수 구하기
367
내 코드
from bisect import bisect_left, bisect_right
n, x = map(int, input().split())
arr = list(map(int, input().split()))
right = bisect_right(arr, x)
left = bisect_left(arr, x)
answer = right - left
if (answer == 0):
print(-1)
else:
print(answer)
로직
- 해당 수의 마지막 인덱스에서 첫번째 인덱스를 빼준다.
<28> 고정점 찾기
368
내 코드
n = int(input())
arr = list(map(int, input().split()))
left = 0
right = len(arr)-1
while True:
if (left > right):
print(-1)
break
pivot = (left + right)//2
if ( arr[pivot] == pivot ):
print(arr[pivot])
break
# 중간값보다 인덱스가 크면
elif ( arr[pivot] < pivot ):
left = pivot + 1
# 중간값보다 인덱스가 작으면
else:
right = pivot - 1
로직
중간값 == index
끝
중간값 < index
범위 바꾸기
중간값 > index
범위 바꾸기
<29> 공유기 설치
369 (실버1) 문제
내 코드
로직
<30> 가사 검색
370 (레벨4) 문제
내 코드
로직
Author And Source
이 문제에 관하여([8/23] 이코테 이진탐색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kj313903/823-이코테-이진탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)