코테

[백준 1300] k번째 수 c++

29도 맑음 2021. 12. 23. 19:43
반응형

2시간 동안 푼 문제....

이분탐색이라고 해서 무작정 하나씩 다했더니 시간초과 났다...

보니까 개수 구하는 쉬운 방법이 있을 줄이야..

근데 또 같은 숫자들이 많아서 조건도 어려웠다ㅎㅎ

 
#include<iostream>

using namespace std;

int n,k;
int result;

int binarySearch(int start, int end){
    if(start>end)   return 0;
    int mid = (start+end)/2;
    int cnt = 0;
    for(int i=1; i<=n; i++){
        cnt+=min(mid/i, n);
        if(cnt >= k){
            result = mid;
            binarySearch(start, mid-1);
            return 0;
        }
    }
    binarySearch(mid+1, end);
    return 0;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin>>n>>k;
    int end;
    if((long long)n*(long long)n>1000000000){
       end = 1000000000;
    }else{
        end = n*n;
    }
    binarySearch(1, end);

    cout<<result;

    return 0;
}​
반응형