[BOJ] 1300

nerry·2022년 3월 6일
0

알고리즘

목록 보기
53/86

문제

solution

출처

우리는 이분 탐색으로 어떤 수보다 작은 자연수의 곱(i * j)이 몇 개인지 알아낼 것이다.
A보다 작은 숫자가 몇개인지 찾아내면 A가 몇 번째 숫자인지 알 수 있다.(너무나 당연)

mid보다 작은 게 몇 개인지 세기..

"""
우리는 이분 탐색으로 어떤 수보다 작은 자연수의 곱(i * j)이 몇 개인지 알아낼 것이다.
A보다 작은 숫자가 몇개인지 찾아내면 A가 몇 번째 숫자인지 알 수 있다.(너무나 당연)

예를 들어 10 * 10에서 20보다 작거나 같은 수를 생각해보자.
1*1~1*10
2*1~2*10
3*1~3*6
~
10*1~10*2

위 수가 존재할텐데, 이는 반대로 생각해보면 20을 행으로 나눈 몫이다.

20//1: 10개 --> 단 열의 숫자(N*N배열이므로)를 초과할 수 없다.
"""
import sys
input = sys.stdin.readline

n=int(input())
k=int(input())

start = 1
end=n*n

while start<=end:
    mid=(start+end)//2

    small_cnt=0
    for i in range(1,n+1):
        small_cnt+=min(mid//i,n)

    if small_cnt >=k:
        end=mid-1
    else:
        start=mid+1
print(mid)
profile
터벅터벅 개발(은좋은)자 로그

0개의 댓글

관련 채용 정보