해결된 질문
작성
·
113
0
n, m = map(int, input().split())
duck = list(map(int, input().split()))
ducks = sorted(duck)
def binary(array, target, start, end):
global result
while start <= end:
sum = 0
mid = (start+end)//2
for i in duck:
if i > mid:
sum += i - mid
if sum < m:
end = mid - 1
else :
result = mid
start = mid+1
result = binary(ducks, m, 0, ducks[-1])
print(result)
이 코드에 입력값
4 6
19 15 10 17
대입하면 15가 나와야하는데 나오지 않습니다. 어디가 문제인걸까요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
주어진 코드를 살펴보니, 조건을 제대로 검사하고 처리해주지 않아서 원하는 결과가 나오지 않는 것 같아요.
기존에 사용하던 변수 sum은 파이썬 내장 함수 이름과 겹치기 때문에, 다른 변수 이름을 사용해야 합니다.
다음과 같이 코드를 수정하여 결과를 얻을 수 있을 겁니다.
def binary(array, target, start, end):
result = 0
while start <= end:
# 중간 값 계산
mid = (start+end)//2
# 중간 값을 기준으로 필요한 양 구하기
summation = 0
for elem in array:
if elem > mid:
summation += elem - mid
# 필요한 양이 목표치보다 작다면 탐색 범위를 왼쪽으로 좁히기
if summation < target:
end = mid - 1
# 필요한 양이 목표치보다 크거나 같다면 탐색 범위를 오른쪽으로 좁히기
else:
# 현재 중간 값으로 결과 업데이트
result = mid
start = mid + 1
return result
# 입력값 받기
n, m = map(int, input().split())
duck = list(map(int, input().split()))
ducks = sorted(duck)
# 이진 탐색 수행
result = binary(ducks, m, 0, ducks[-1])
# 결과 출력
print(result)
수정된 코드로 다시 실행해보시고, 원하는 결과를 얻을 수 있는지 확인해 보세요. 혹시 여전히 이상한 결과가 나온다면, 다른 부분을 살펴봐야 할 것 같습니다.