-코드
n, m = map(int, input().split())
a = list(map(int, input().split()))
start = 1
end = max(a)
result = 0
while start <= end:
mid = (start + end) // 2
r = 0
for l in a:
if l > mid:
r += l - mid
if r >= m:
start = mid + 1
result = mid
else:
end = mid - 1
print(result)
랜선 자르기와 비슷한데 r의 값이 m과 동일해야 하므로 이전 문제와 다르게 end를 max(a)로 하고 for문을 조건문을 안 쓰고 했더니 음수 값도 더해져서 이상한 값이 나오기 때문에 추가해 주었습니다. 그리고 r == m일 경우 mid값을 출력하게 했으나 틀려서 찾아보니 if문안에 result = mid를 넣으면 해결이 가능해서 해결했습니다. 하지만 어떻게 해도 시간 초과가 떠서 pypy3로 제출했습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬]1874번 스택 수열 (0) | 2021.05.14 |
---|---|
[백준/파이썬]1929번 소수 구하기 (0) | 2021.05.13 |
[백준/파이썬]1654번 랜선 자르기 (0) | 2021.05.11 |
[백준/파이썬]4949번 균형잡힌 세상 (0) | 2021.05.10 |
[프로그래머스/파이썬] 완주하지 못한 선수 (0) | 2021.05.09 |