https://www.acmicpc.net/problem/2512
2512λ²: μμ°
첫째 μ€μλ μ§λ°©μ μλ₯Ό μλ―Ένλ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 3 μ΄μ 10,000 μ΄νμ΄λ€. λ€μ μ€μλ κ° μ§λ°©μ μμ°μμ²μ νννλ Nκ°μ μ μκ° λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ΄ κ°λ€μ λͺ¨λ 1 μ΄μ
www.acmicpc.net
(μ§λ°©λ³ μμ²μμ° μ€ μ΅λκ°)*N μ κ°μ΄ μ΄ μμ° Mλ³΄λ€ κ°κ±°λ ν° κ²½μ°μλ μμ°μ κ° μ§λ°©μ΄ μμ²ν λλ‘ λ°°μ ν΄μ£Όλ©΄ λμ§λ§,
κ·Έλ μ§ μμ κ²½μ°λ μνμ‘μ λ°°μ ν΄μ£Όμ΄μΌ νλ€.
κ°λ¨νκ²λ μ ννμμ μκ°ν μ μμλλ°,
μ£Όμ΄μ§ mμ λ²μκ° 1λΆν° 1,000,000,000 μ¬μ΄λΌλ μ μ΄ κ±Έλ Έλ€.
λ¬Έμ μμμ μ νμκ°μ 1μ΄μ΄κ³ , νμ΄μ¬μ 1μ΄λμ μ½ 2000λ§ λ²μ μ°μ°μ μννλ€.
λ°λΌμ μ ννμμ νλ©΄ μκ°μ΄κ³Όκ° λκ² λλ€.
κ·Έλμ μκ°λ³΅μ‘λκ° logNμΈ μ΄μ§νμμ μ°κΈ°λ‘ νλ€.
κ° μ§λ°©μ΄ μμ²ν μμ°κ°μ λ°°μ΄ requestsμ μ μ₯νλ€.
μνμ μ΄ xμΌ λ μ§κΈλλ μ΄ μμ° κ³μ°νκΈ°
def budget(x):
result=0
for i in range(n):
if x>=requests[i]:
result += requests[i]
else:
result += x
return result
-μ§λ°©μμ μμ²ν λΉμ©μ΄ μνμ‘λ³΄λ€ ν¬κ±°λ κ°μ κ²½μ°, resultμ μνμ‘μ λν΄μ€λ€
-κ·Έλ μ§ μμ κ²½μ°, resultμ μ§λ°©μμ μμ²ν λΉμ©μ λν΄μ€λ€
-resultλ₯Ό 리ν΄νλ€
μνμ x κ²°μ νκΈ°
start = 0
end = max(requests)
result = 0
while start <= end:
mid = (start+end)//2
if budget(mid)<=m:
result=mid
start=mid+1
else:
end=mid-1
print(result)
-μμμ :0, λμ : μμ² κΈμ‘ μ€ μ΅λκ°
-μνμ μ΄ mμΌ λ μ§κΈλλ μ΄ μμ°μ΄ Mλ³΄λ€ μμΌλ©΄, resultμ mμ μ μ₯ ν mλ³΄λ€ ν° λ²μλ₯Ό νμ
-μνμ μ΄ mμΌ λ μ§κΈλλ μ΄ μμ°μ΄ Mμ λμ΄κ°λ©΄, mλ³΄λ€ μμ λ²μλ₯Ό νμ
μ 체 μ½λ
import sys
input = sys.stdin.readline
#μνμ xμΌ λ μ΄ μ§κΈ μμ° κ³μ°
def budget(x):
result = 0
for i in range(n):
if x >= requests[i]:
result += requests[i]
else:
result += x
return result
#μ
λ ₯λ°κΈ°
n = int(input())
requests = list(map(int,input().split()))
m = int(input())
#μμ°μ΄ μΆ©λΆνμ¬ κ° μ§λ°©μμ μμ²νλλ‘ μ§κΈν μ μλ κ²½μ°
if max(requests)*n <= m:
print(max(requests))
exit()
#binary searchλ‘ κ°μ₯ ν° μνμ‘ μ°ΎκΈ°
result = 0
start=0
end=max(requests)
while start <= end:
mid = (start+end)//2
if budget(mid) <= m:
result = mid
start = mid+1
else:
end = mid-1
print(result)
'μκ³ λ¦¬μ¦ λ¬Έμ νμ΄ > Binary Search' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€]2110λ²: 곡μ κΈ° μ€μΉ (0) | 2023.03.10 |
---|---|
[μ΄μ½ν ]λ‘λ³Άμ΄ λ‘ λ§λ€κΈ° / [λ°±μ€]2805λ²: λ무 μλ₯΄κΈ° (0) | 2023.02.24 |