acmicpc

[BAEKJOON] 1300. K번째 수

코드와이 2021. 11. 6. 17:53

 

문제링크

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

 

이중탐색

1 2 3

2 4 6

3 6 9

 

low = 1, high = 7 이라면

mid = 4 가 되고

배열에서 4보다 작은 수는 cnt = 6(3 + 2 + 1)이 된다.

 

이중탐색이 끝날 때까지 cnt를 최신화한다.

package acmicpc.Gold3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class K번째_수 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		long k = Integer.parseInt(br.readLine());
		
		long left = 1;
		long right = k;
		long cnt = 0;
		long ans = 0;
		
		while(left <= right) {
			long mid = (left + right) / 2;
			cnt = 0;
			for(int i = 1 ; i <= n ; i++) {
				cnt += Math.min(mid / i, n);
			}
			
			if(cnt >= k) {
				ans = mid;
				right = mid - 1;
			} else {
				left = mid + 1;
			}
			
		}
		System.out.println(ans);
	}
}