Java

[백준 1300] K번째 수 (JAVA)

iheeeee6-6 2023. 5. 5. 22:02
728x90

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

 

일차원배열에 이차원배열의 값들을 넣고 sort하는 방식으로 접근했더니 역시나 10억이 넘기에 메모리 초과였다,,

 

1. 이분탐색으로, mid을 z번째 숫자라고 생각한다.

2. 줄마다 mid보다 작은 값이 몇개 있는지 확인한다. 즉, Math.min(mid / i번째 줄 , n)의 값을 모두 더한다.

3. 모두 더한 값이 k와  같을 경우-> result는 mid 이다!  

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

public class test1300 {

	static int result=0;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n= Integer.parseInt(br.readLine());
		int k= Integer.parseInt(br.readLine());
		
		find(n,k);
		System.out.println(result);
	}

	static void find(int n,int k) {
		int left=1;
		int end=k;
		while(left<=end) {
			int mid = (left+end)/2;
			
			int count=0;
			for(int i=1;i<n+1;i++) {
				count+=Math.min(mid/i, n);
			}
			
			if(count<k)
				left=mid+1;
			else {
				result=mid;
				end=mid-1;
			}
		}
	}
}

'Java' 카테고리의 다른 글

[백준 1644] 소수의 연속합 (JAVA)  (0) 2023.05.07
[백준 3273] 두 수의 합 (JAVA)  (1) 2023.05.06
[백준 1238] 파티 (JAVA)  (0) 2023.05.04
[백준 2580] 스도쿠 (JAVA)  (0) 2023.05.03
[백준 2493] 탑 (JAVA)  (0) 2023.05.02