[λ°±μ€] (Swift) 2512λ² - μμ° (μ΄λΆνμ, νλΌλ©νΈλ¦ μμΉ)
β«οΈ λ¬Έμ
https://www.acmicpc.net/problem/2512
2512λ²: μμ°
첫째 μ€μλ μ§λ°©μ μλ₯Ό μλ―Ένλ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 3 μ΄μ 10,000 μ΄νμ΄λ€. λ€μ μ€μλ κ° μ§λ°©μ μμ°μμ²μ νννλ Nκ°μ μ μκ° λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. μ΄ κ°λ€μ λͺ¨λ 1 μ΄μ
www.acmicpc.net
β«οΈ λμ νμ΄
보μλ§μ μ΄μ½ν μ± μ μλ 'νλΌλ©νΈλ¦ μμΉ' λ¬Έμ μ λνμ νμΈλ― μΆλ€. μ΄λ €μ΄ λ¬Έμ λ μλμ§λ§, νμ΄λ₯Ό νλ€κ° νκ°μ§ λμΉκ³ μκ°ν λΆλΆμ΄ μμ΄μ κΈ°λ‘νκ³ μ λΈλ‘κ·Έ κΈμ μμ±νλ€.
βΎοΈ λμΉκ³ μκ°ν λΆλΆ
μ²μμ μκ°νμ λ, startλ μ£Όμ΄μ§ μ§λ°©μμ°μ μ΅μκ°, end λ μ£Όμ΄μ§ μ§λ°©μμ°μ μ΅λκ°μΌλ‘ μ€μ νλ©΄ λκ²κ΅¬λ μΆμ΄μ κ·Έλ κ² κ΅¬ννλ€. κ·Όλ°, μ΄λ κ² νλκΉ κ³μ ν리λ κ²μ΄λ€! μ΄μ κ° λκΉ
쑰건μμ μ΅μ νκ°μ μ§λ°©μμ°μ 무쑰건 μΆ©μ‘±ν΄μΌνλ€λΌλ μ‘°κ±΄μ΄ μμ§ μμκ°? κ·Έλ λ€. κ·Έλμ startκ°μ 0λΆν° μμνλκ² λ§λ€. λ°±μ€ μμ μμλ κ΅κ° μ΄μμ°μ μ§λ°©μμ°λ€λ³΄λ€ ν¬κ² μ£Όμ΄μ‘μ§λ§, 쑰건μ μ보면 κ΅κ° μ΄μμ°μ νμλ¦Ώμ μΌ μλ μλ€. (μ§λ°© κ°―μλ³΄λ€ ν¬λ€λ 쑰건μ΄κΈ° λλ¬Έμ 4κ°μ μ§λ°©μ΄ μ£Όμ΄μ‘λ€λ©΄, κ΅κ°μ΄μμ°μ 4μΌμλμλ€λ κ²!)
κ·Έλ κΈ° λλ¬Έμ startλ₯Ό 0λΆν° μμν΄μΌνλ€.
β«οΈ μ λ΅μ½λ
import Foundation
let n = Int(readLine()!)!
let cities = readLine()!.split(separator: " ").map{ Int($0)! }.sorted(by: <)
let budget = Int(readLine()!)!
func binarySerach(arr: [Int], start: Int, end: Int) -> Int {
var start = start
var end = end
while start <= end {
let mid = start + ((end - start) / 2)
let total = sum(cities: cities, mid: mid)
if budget >= total {
start = mid + 1
} else if budget < total {
end = mid - 1
}
}
return end
}
func sum(cities: [Int], mid: Int) -> Int {
var total = 0
for i in 0..<n {
if mid > cities[i] {
total += cities[i]
} else {
total += mid
}
}
return total
}
print(binarySerach(arr: cities, start: 0, end: cities.max()!))