[๋ฐฑ์ค] (Swift) 1654๋ฒ - ๋์ ์๋ฅด๊ธฐ (feat. ์ด๋ถํ์)
๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1654
1654๋ฒ: ๋์ ์๋ฅด๊ธฐ
์ฒซ์งธ ์ค์๋ ์ค์์์ด ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๋์ ์ ๊ฐ์ K, ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋์ ์ ๊ฐ์ N์ด ์ ๋ ฅ๋๋ค. K๋ 1์ด์ 10,000์ดํ์ ์ ์์ด๊ณ , N์ 1์ด์ 1,000,000์ดํ์ ์ ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํญ์ K โฆ N ์ด๋ค. ๊ทธ
www.acmicpc.net
๐ ๋์ ํ์ด
๐ก ๋ฌด์ธ๊ฐ๋ฅผ ์๋ฅด๋ ๋ฌธ์ , ๊ทธ๋ฆฌ๊ณ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋์ถฉ.. '์ด๋ถํ์์ธ๊ฐ' ํ๋ feel์ด ์๋ค.
2๋ฒ์์ ์ ๋ต์ธ 200์ด ๋์ถ๋์๋๋ฐ ์ ๋ฉ์ถ์ง ์๋๊ฐ? ๊ทธ ์ด์ ๋, start์ end๊ฐ ๊ฐ์์ง๋ ์ง์ ์ ์ฐพ์์ผ, ํด๋น ํ์์ ๋ชจ๋ ๋๊ณ ๋์ ์ต๋๊ฐ์ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก, 2๋ฒ์์ ์๋ฌด๋ฆฌ 200์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋์ด๋ ์ฌ๊ธฐ์ ๋๋ผ ๋ฐฉ๋ฒ์ด ์๋ค. 200์ด ์ต๋ ๋์ ๊ธธ์ด๋ผ๊ณ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค!
์ด ๊ณผ์ ์ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค. ์ด๋ถํ์๋ ๊ณต์? ๊ฐ์ด ํ๋๋ง ์์ฉ ํด์ ์๊ณ ์๋ค๋ฉด, ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๊ฐ ์ด๋ถํ์์์ ๋นจ๋ฆฌ ๊นจ์ฐ์น๋ค๋ฉด, ์ฝ๊ฒ ํ ์ ์๋ค.
๐ ์ ๋ต์ฝ๋
GitHub - deslog/Algorithm: โจ ๋ฐฑ์ค, ํ๋ก๊ทธ๋๋จธ์ค Swift ๋ฌธ์ ํ์ด โจ
โจ ๋ฐฑ์ค, ํ๋ก๊ทธ๋๋จธ์ค Swift ๋ฌธ์ ํ์ด โจ. Contribute to deslog/Algorithm development by creating an account on GitHub.
github.com
import Foundation
let kn = readLine()!.split(separator: " ").map { Int(String($0))! }
let k = kn[0]
let n = kn[1]
var cables = [Int]()
for _ in 0..<k {
cables.append(Int(readLine()!)!)
}
func solution(k: Int, n: Int, cables: [Int]) -> Int {
var start = 1
var end = cables.max()!
var result = 0
while start <= end {
let mid = (start + end) / 2
var tempResult = 0
for cable in cables {
tempResult += cable/mid
}
// ๋ง์ฝ tempResult๊ฐ n๋ณด๋ค ์์ผ๋ฉด ๊ธธ์ด ์ค์ฌ์ค์ผํจ, end๋ฅผ mid๋ก
if tempResult < n {
end = mid - 1
} else { // ๋ง์ฝ tempResult๊ฐ n๋ณด๋ค ํฌ๋ฉด, ๊ธธ์ด๋ฅผ ๋๋ ค์ค์ผํจ start๋ฅผ mid๋ก
//๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ n๋ณด๋ค ํฌ๊ฒ๋์๋ ๋๋๊น result(๋์ ์ ์ต๋๊ธธ์ด)๋ฅผ ๊ฐฑ์ ํ๋ฉด์ ์งํ
start = mid + 1
result = mid
}
}
return result
}
print(solution(k: k, n: n, cables: cables))