BOJ 1300 K번째 수

1 개요[ | ]

BOJ 1300 K번째 수


2 C++[ | ]

C++
Copy
#include <iostream>
using namespace std;

#define MIN(a,b) ((a) < (b) ? (a) : (b))

long N, k;

long getCount(long num) {
    long cnt = 0;
    for(long i=1; i<=N; i++) {
        cnt += MIN(num/i, N);
    }
    return cnt;
}

long solve() {
    long start = 1;
    long end = N*N;
    long mid;
    long answer = 0;
    while(start < end) {
        mid = (start+end)/2;
        if(getCount(mid) < k) {
            start = mid + 1;
            answer = mid;
        } else {
            end = mid;
        }
    }
    return answer + 1;
}

int main() {
    cin >> N >> k;
    cout << solve();
}