백준 - K번째 수 (1300)

Seoyoung Lee·2023년 1월 27일
0

알고리즘

목록 보기
28/104
post-thumbnail
let N = Int(readLine()!)!
let k = Int(readLine()!)!

var start = 1
var end = k
var answer = 0

while start <= end {
    let mid = (start + end) / 2
    var count = 0
    
    for i in 1...N {
        count += min(N, mid / i)
    }
    
    if count < k {
        start = mid + 1
    } else {
        answer = mid
        end = mid - 1
    }
}

print(answer)
  • B[k] = x 일 때 k는 x보다 작거나 같은 원소의 최소 개수이다. → 이진탐색을 사용해서 풀 수 있다.
  • 어떤 값보다 작거나 같은 원소의 개수를 센다. 그리고 그 개수와 주어진 k값을 비교하고 범위를 조정하며 k값을 찾는다
  • 참고 링크
profile
나의 내일은 파래 🐳

0개의 댓글