백준

백준 1300 - Java

으엉어엉 2024. 11. 19. 13:00
728x90

 

import java.util.Scanner;

public class BJ1300 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int K = sc.nextInt();

        long low = 1;
        long high = K;

        //이분 탐색 시작
        while(low < high) {
            long mid = (low + high) / 2;
            long count = 0;

            for(int i = 1; i <= N; i++) {
                count += Math.min(mid / i, N);
            }

            if(K <= count) {
                high = mid;
            } else {
                low = mid + 1;
            }
        }

        System.out.println(low);
    }
}

 

N X N 이라는 행렬 A가 B로 나열 될 때를 푸는 문제이다.

i×j이므로, midmid 이하의 숫자를 세는 로직은 다음과 같음:

  • 각 행 i에서 mid 이하의 숫자는 mid/ 개.
  • 단, 한 행의 숫자 수는 개를 넘을 수 없으므로 Math.min(mid / i, N)를 사용.

 

728x90

'백준' 카테고리의 다른 글

백준 15663 - Java  (0) 2024.11.21
백준 11725 - Java  (1) 2024.11.20
백준 15666 - Java  (0) 2024.11.18
백준 15654 - Java  (0) 2024.11.17
백준 11054 - java  (1) 2024.11.15