본문 바로가기
백준/1 - 5000

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

by lms0806 2021. 10. 18.
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

풀이

배열을 직접 만들어서 정렬 후 그 위치의 값을 출력하면 메모리 초과가 나옵니다.

 

소스코드

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
		
		int n = Integer.parseInt(br.readLine()), k = Integer.parseInt(br.readLine());
		
		long left = 1, right = k;
		long answer = 0;
		
		while(left <= right) {
			long mid = (left + right) / 2;
			long cnt = 0;
			
			for(int i = 1; i <= n; i++) {
				cnt += Math.min(mid / i, n);
			}
			
			if(cnt < k) {
				left = mid + 1;
			}
			else {
				answer = mid;
				right = mid - 1;
			}
		}
		System.out.print(answer);
		
	}
}
728x90
반응형

댓글