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);
	  
   }
}아래 글을 참고해서 이번 문제를 풀어보았습니다.
백준 1300 / 이분 탐색 (Binary Search) / JAVA
오늘은 백준 1300번 문제를 풀어 보려고 한다. https://www.acmicpc.net/problem/1300 이 문제는 이분 탐색을 사용하여 푸는 문제이다. 이분 탐색을 알고, 약간의 아이디어만 생각해 낼 수 있으면 풀 수 있는
devowen.com
위 블로그에서 그림을 통해 잘 설명이 되어 있는데요, k번째 숫자는 mid/i와 N 중에 작은 수를 계속 더한 값이 나온다는 점이 포인트였습니다.
이후 이분 탐색을 이용하여 k번째 숫자를 찾았습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
| [BOJ 11279번] 최대 힙(JAVA) (0) | 2020.09.08 | 
|---|---|
| [BOJ 1927번] 최소 힙 (JAVA) (0) | 2020.09.07 | 
| [BOJ 2805번] 나무 자르기(JAVA) (0) | 2020.09.03 | 
| [BOJ 2981번] 검문(JAVA) (0) | 2020.09.02 | 
| [BOJ 6549번] 히스토그램에서 가장 큰 직사각형(JAVA) (0) | 2020.09.02 |