본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 1300번] K번째 수(JAVA)

by 테크케찰 2020. 9. 4.

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.*;
import java.util.*;

class Main{
   
   static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
   static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
   
   public static void main(String args[]) throws Exception {
	   long N=Long.parseLong(br.readLine());
	   long K=Long.parseLong(br.readLine());
	   
	   long left=1;
	   long right=K;
	   long result=0;
	   
	   while(left<=right) {
//		   System.out.println("*");
		   long cnt=0;
		   long mid=(left+right)/2;
		   for(int i=1;i<=N;i++) {
			   cnt+=Math.min(mid/i, N);
		   }
		   if(cnt<K) {
			   left=mid+1;
		   }
		   else{
			   right=mid-1;
			   result=mid;
		   }
	   }
	   
	   System.out.println(result);
	  
   }
}

아래 글을 참고해서 이번 문제를 풀어보았습니다.

https://devowen.com/265

 

백준 1300 / 이분 탐색 (Binary Search) / JAVA

오늘은 백준 1300번 문제를 풀어 보려고 한다. https://www.acmicpc.net/problem/1300 이 문제는 이분 탐색을 사용하여 푸는 문제이다. 이분 탐색을 알고, 약간의 아이디어만 생각해 낼 수 있으면 풀 수 있는

devowen.com

위 블로그에서 그림을 통해 잘 설명이 되어 있는데요, k번째 숫자는 mid/i와 N 중에 작은 수를 계속 더한 값이 나온다는 점이 포인트였습니다.

이후 이분 탐색을 이용하여 k번째 숫자를 찾았습니다.