๋ฌธ์ :
https://www.acmicpc.net/problem/1300
ํ์ด :
๋ฌธ์ ๋ฅผ ์ง์ ํ์ง ๋ชปํ์ง๋ง, ์ ๊ธฐํ ํ์ด๊ฐ ์์ด์ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ณด๋ ค๊ตฌ ํ๋ค.
๋ฌธ์ ๋ 2์ฐจ์ N*N ๋ฐฐ์ด ๊ฐ์ 1์ฐจ์ N*N๋ฐฐ์ด๋ก ๋ฐ๊พธ์์๋ k๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ(m)์ ๊ตฌํ๋ ๋ฌธ์ ์๋ค.
์๋ฅผ ๋ค์ด์ N = 4 ๋ฐฐ์ด์ด ์์๋,
์ด๋ฅผ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋์ฌ๋ณด๋ฉด
์ด๋ ๊ฒ ๋ ๊ฒ์ด๊ณ ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฅผ ์ด๋ถ ํ์์ผ๋ก ์ ๊ทผ ํ ์ ์๋ ๊ฒ์ด๋ค.
์ฌ์ค ์ ํ ํ์์ผ๋ก ์ฐพ์ผ๋ ค ํ์ง๋ง N(100,000) X N(100,000) ์ ๋ฐฑ์ต์ด๋ฏ๋ก ์๊ฐ์ด๊ณผ๊ฐ ๋๊ฒ ๋๋ค. ๊ทธ๋์ ์ด๋ถํ์์ผ๋ก ํ์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด k๊ฐ 6์ด๊ณ k๋ฒ์งธ ์ 4(m = 4)๋ผ๊ณ ํ์๋ 4๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์๋ค์ ๊ฐ์๊ฐ ๊ณง ์ธ๋ฑ์ค๊ฐ ๋๋ค. ๋ฐ๋ผ์ k๋ณด๋ค ์๋ค๋ฉด left๊ฐ์ ์ฆ๊ฐ์์ผ ๋ฒ์๊ฐ ํฐ ์ชฝ์์ ๊ฒ์ฌํด์ผ ํ๋ค. ๋ฐ๋๋ก ๊ฐ์๊ฐ k๋ณด๋ค ํฌ๋ค๋ฉด right๊ฐ์ ๊ฐ์์์ผ ์์ ๋ฒ์์ชฝ์์ ๊ฒ์ฌํด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด m๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์๋ ์ด๋ป๊ฒ ๊ตฌํ ์ ์์๊น ?
https://www.acmicpc.net/board/view/14272
์ด ๊ธ์ ์ฐธ๊ณ ํ๋ค.
m๋ณด๋ค ์์ ๊ฐ์ m ๊ฐ์ i๋ก ๋๋ ๊ฐ๊ณผ n์ค ์์ ๊ฐ์ ์ฑํํ์ฌ ๋ค ๋ํ๊ฒ ๋๋ฉด n๋ณด๋ค ์์ ๊ฐ์ ์ฐพ์ ์ ์๋ค (์ ๊ธฐ ..!)
๋ฐ๋ผ์ ์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด๋ถํ์์ ์งํํ์ฌ ํธ๋ ๊ฒ์ด๋ค.
swift ์ฝ๋ :
//
// main.swift
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/03/31.
//
import Foundation
var n = Int(readLine()!)!
var k = Int(readLine()!)!
func binearySearch(_ left: Int, _ right: Int) -> Int {
if(left > right) { return left }
var mid = (left + right) / 2
var cnt = 0
for i in 1..<n+1 {
if(n > mid / i) { // mid ๋ณด๋ค ์์ ์ ๋ํด์ค
cnt += mid / i
}else {
cnt += n
}
}
if(cnt < k) {
return binearySearch(mid+1, right)
}else {
return binearySearch(left, mid - 1)
}
}
print(binearySearch(1, k))
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] Swift 9466 ํ ํ๋ก์ ํธ DFS (0) | 2022.04.12 |
---|---|
[๋ฐฑ์ค] Swift 2529 ๋ถ๋ฑํธ backtracking (0) | 2022.04.07 |
[๋ฐฑ์ค] Swift 1806 ๋ถ๋ถํฉ ํฌํฌ์ธํฐ (0) | 2022.03.29 |
[๋ฐฑ์ค] Swift 2468 ์์ ์์ญ BFS (0) | 2022.03.11 |
[๋ฐฑ์ค] 1516 ๊ฒ์ ๊ฐ๋ฐ (0) | 2022.03.03 |
๋๊ธ