Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Life Engineering

[BOJ 13702] 이상한 술집 (Java) 본문

Problem Solving

[BOJ 13702] 이상한 술집 (Java)

흑개 2022. 6. 13. 17:34

https://www.acmicpc.net/problem/13702

 

13702번: 이상한 술집

프로그래밍 대회 전날, 은상과 친구들은 이상한 술집에 모였다. 이 술집에서 막걸리를 시키면 주전자의 용량은 똑같았으나 안에 들어 있는 막걸리 용량은 랜덤이다.  즉 한 번 주문에 막걸리 용

www.acmicpc.net

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

public class Main_BOJ_13702 {
	static int max_val=Integer.MAX_VALUE;
	static int N, K;
	static int[] arr;
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer(br.readLine());
		N=Integer.parseInt(st.nextToken());
		K=Integer.parseInt(st.nextToken());
		arr=new int[N];
		for (int i=0; i<N; i++) {
			arr[i]=Integer.parseInt(br.readLine());
		}
		System.out.println(binarySearch(0, Integer.MAX_VALUE));
		
		
	}
	private static long binarySearch(long start, long end) {
		long answer=0;
		long left=start, right=end;
		while (left<=right) {
			long sum=0;
			long mid=(left+right)/2;
			for (int i=0; i<N; i++) {
				if (mid!=0)
				sum+=(arr[i]/mid);
			}
			if (sum>=K) {
				answer=mid;
				left=mid+1;
			}
			else {
				right=mid-1;
			}
		}
		return answer;
	}

}

https://velog.io/@ilil1/%EB%B0%B1%EC%A4%80-13702%EB%B2%88-%EC%9D%B4%EC%83%81%ED%95%9C%EC%88%A0%EC%A7%91-java

 

이분탐색 문제

0부터 나올 수 있는 최대값(2^31-1)까지 체크해준다

결과값이 K보다 크거나 같으면 =>답안 저장, 나누는 몫을 늘려준다(left=mid+1)

결과값이 K보다 작으면=>나누는 몫을 줄여준다(right=mid-1)