π‘ 쑰건
- κ΅κ°μ μν μ€ νλλ μ¬λ¬ μ§λ°©μ μμ°μμ²μ μ¬μ¬νμ¬ κ΅κ°μ μμ°μ λΆλ°°νλ κ²μ΄λ€.
κ΅κ°μμ°μ μ΄μ‘μ 미리 μ ν΄μ Έ μμ΄μ λͺ¨λ μμ°μμ²μ λ°°μ ν΄ μ£ΌκΈ°λ μ΄λ €μΈ μλ μλ€.
κ·Έλμ μ ν΄μ§ μ΄μ‘ μ΄νμμ κ°λ₯ν ν μ΅λμ μ΄ μμ°μ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ λ°°μ νλ€.
- λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ μμ²ν κΈμ‘μ κ·Έλλ‘ λ°°μ νλ€.
- λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ νΉμ ν μ μ μνμ‘μ κ³μ°νμ¬ κ·Έ μ΄μμΈ μμ°μμ²μλ λͺ¨λ μνμ‘μ λ°°μ νλ€.
- μνμ‘ μ΄νμ μμ°μμ²μ λν΄μλ μμ²ν κΈμ‘μ κ·Έλλ‘ λ°°μ νλ€.
- μ¬λ¬ μ§λ°©μ μμ°μμ²κ³Ό κ΅κ°μμ°μ μ΄μ‘μ΄ μ£Όμ΄μ‘μ λ, μμ 쑰건μ λͺ¨λ λ§μ‘±νλλ‘ μμ°μ λ°°μ νλ λ¬Έμ .
- 첫째 μ€μλ μ§λ°©μ μλ₯Ό μλ―Ένλ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 3 μ΄μ 10,000 μ΄νμ΄λ€.
- λ€μ μ€μλ κ° μ§λ°©μ μμ°μμ²μ νννλ Nκ°μ μ μκ° λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ΄ κ°λ€μ λͺ¨λ 1 μ΄μ 100,000 μ΄νμ΄λ€.
- κ·Έ λ€μ μ€μλ μ΄ μμ°μ λνλ΄λ μ μ Mμ΄ μ£Όμ΄μ§λ€. Mμ N μ΄μ 1,000,000,000 μ΄νμ΄λ€.
- μ΄λΆνμ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
n = int(stdin.readline())
arr = list(map(int, stdin.readline().split()))
m = int(stdin.readline())
start, end = 0, max(arr)
ans = -int(1e9)
while start <= end:
mid = (start + end) // 2
total = 0
for i in arr:
total += min(i, mid)
if total > m:
end = mid - 1
else:
start = mid + 1
ans = max(ans, mid)
print(ans)
π μμ λ° μ€νκ²°κ³Ό
μμ
4
120 110 140 150
485
μ€νκ²°κ³Ό
127
β¨οΈ λ¬Έμ νμ΄
- μ΄ μμ°μ λνλ΄λ Mμ΄ N μ΄μ 1,000,000,000 μ΄νμ΄λ€.
μ΄ ν° κ°μ NλΆν° νμνλ©΄ μκ°μ΄κ³Όκ° 걸리기 λλ¬Έμ μ΄λΆνμμ μ¬μ©ν΄ μ΄μμ°μμ μνμ‘μ μ°Ύμμ£Όλ©΄ λλ€.
- μμ²ν μμ°λ€μ λ΄μ arr 리μ€νΈμ max κ°μ r, 0μ lλ‘ λκ³ μ΄λΆνμμ μ§ννλ€.
- (l + r) // 2 κ°μ mid λ‘ λκ³ arr 리μ€νΈλ₯Ό μννλ©΄μ mid κ°κ³Ό μννλ κ°μ λΉκ΅ν΄ μμ κ°μ total μ λ£μ΄μ€λ€.
- total μ΄ m κ°λ³΄λ€ ν΄ λλ rμ midλ‘ λ‘κ²¨μ£Όκ³ , κ·Έ μΈμ μν©μΌ λλ ansμ κ°κ³Ό λΉκ΅ν΄μ ν° κ°μ ans μ μ μ₯νλ€.