728x90
import java.util.Scanner;
public class BJ1300 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
long low = 1;
long high = K;
//이분 탐색 시작
while(low < high) {
long mid = (low + high) / 2;
long count = 0;
for(int i = 1; i <= N; i++) {
count += Math.min(mid / i, N);
}
if(K <= count) {
high = mid;
} else {
low = mid + 1;
}
}
System.out.println(low);
}
}
N X N 이라는 행렬 A가 B로 나열 될 때를 푸는 문제이다.
는 i×j이므로, midmid 이하의 숫자를 세는 로직은 다음과 같음:
- 각 행 i에서 mid 이하의 숫자는 mid/ 개.
- 단, 한 행의 숫자 수는 개를 넘을 수 없으므로 Math.min(mid / i, N)를 사용.
728x90
'백준' 카테고리의 다른 글
백준 15663 - Java (0) | 2024.11.21 |
---|---|
백준 11725 - Java (1) | 2024.11.20 |
백준 15666 - Java (0) | 2024.11.18 |
백준 15654 - Java (0) | 2024.11.17 |
백준 11054 - java (1) | 2024.11.15 |