본문 바로가기
BOJ

1300. K번째 수

by hyunnwoo 2023. 7. 18.

https://www.acmicpc.net/problem/1300

 

1300번: K번째 수

세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B

www.acmicpc.net

 

 

티어 : 골드2

 

약간의 수학적 규칙성? 과 이진 탐색을 이용해서 해결했다.

 

다 풀고 나서 다른 사람들의 풀이를 구경했는데 나와 같은 방법으로 해결한 사람이 많이 보여서

왠지 모르게 기분이 좋았다.

 

#include<stdio.h>

#define MAX 1000000000

int n, k;

int min(int x, int y){
    if(x < y) return x;
    return y;
}

int f(int left, int right){
    
    int mid = (left + right)/2;
    long long int sum=0;
    for(int i=1 ; i<=n ; i++) sum += min(mid/i, n);

    if(right == left+1){
         if(sum >= k) return left;
         else return right;
    }

    if(sum >= k) return f(left, mid);
    else return f(mid, right);
}

int main()
{
    scanf("%d %d", &n, &k);
    printf("%d", f(0, MAX));
}

'BOJ' 카테고리의 다른 글

10868. 최솟값  (0) 2023.07.19
8980. 택배  (0) 2023.07.18
2042. 구간 합 구하기  (0) 2023.07.18
8983. 사냥꾼  (0) 2023.06.28
2457. 공주님의 정원  (0) 2023.06.26