๋ฐ์ํ
๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1654
๐ ๋์ ํ์ด
๐ก ๋ฌด์ธ๊ฐ๋ฅผ ์๋ฅด๋ ๋ฌธ์ , ๊ทธ๋ฆฌ๊ณ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋์ถฉ.. '์ด๋ถํ์์ธ๊ฐ' ํ๋ feel์ด ์๋ค.
2๋ฒ์์ ์ ๋ต์ธ 200์ด ๋์ถ๋์๋๋ฐ ์ ๋ฉ์ถ์ง ์๋๊ฐ? ๊ทธ ์ด์ ๋, start์ end๊ฐ ๊ฐ์์ง๋ ์ง์ ์ ์ฐพ์์ผ, ํด๋น ํ์์ ๋ชจ๋ ๋๊ณ ๋์ ์ต๋๊ฐ์ ์ฐพ์ ๊ฒ์ด๋ฏ๋ก, 2๋ฒ์์ ์๋ฌด๋ฆฌ 200์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋์ด๋ ์ฌ๊ธฐ์ ๋๋ผ ๋ฐฉ๋ฒ์ด ์๋ค. 200์ด ์ต๋ ๋์ ๊ธธ์ด๋ผ๊ณ ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค!
์ด ๊ณผ์ ์ ์ฝ๋๋ก ๊ตฌํํ๋ฉด ์๋์ ๊ฐ๋ค. ์ด๋ถํ์๋ ๊ณต์? ๊ฐ์ด ํ๋๋ง ์์ฉ ํด์ ์๊ณ ์๋ค๋ฉด, ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๊ฐ ์ด๋ถํ์์์ ๋นจ๋ฆฌ ๊นจ์ฐ์น๋ค๋ฉด, ์ฝ๊ฒ ํ ์ ์๋ค.
๐ ์ ๋ต์ฝ๋
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))
๋ฐ์ํ
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 1037๋ฒ - ์ฝ์ (0) | 2022.12.23 |
---|---|
[๋ฐฑ์ค] (Swift) 11403๋ฒ - ๊ฒฝ๋ก์ฐพ๊ธฐ (DFS๋ก ํ๊ธฐ) (2) | 2022.09.19 |
[๋ฐฑ์ค] (Swift) 1931๋ฒ - ํ์์ค ๋ฐฐ์ (์ค๋ฒ1) (feat. ๊ทธ๋ฆฌ๋, ํ์๋ฒ) (0) | 2022.08.31 |
[๋ฐฑ์ค] (Swift) 1679๋ฒ - ์ซ์๋์ด (dp) (0) | 2022.07.28 |
[๋ฐฑ์ค] (Swift) 1446๋ฒ - ์ง๋ฆ๊ธธ (dp, ๋ค์ต์คํธ๋ผ, ์ต๋จ๊ฒฝ๋ก ๊ตฌํ๊ธฐ) (0) | 2022.07.22 |