티스토리 뷰
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;
}
}
이분탐색 문제
0부터 나올 수 있는 최대값(2^31-1)까지 체크해준다
결과값이 K보다 크거나 같으면 =>답안 저장, 나누는 몫을 늘려준다(left=mid+1)
결과값이 K보다 작으면=>나누는 몫을 줄여준다(right=mid-1)
'Problem Solving' 카테고리의 다른 글
[프로그래머스] 숫자 변환하기 (Java) (0) | 2023.08.22 |
---|---|
[프로그래머스] 디스크 컨트롤러 (Java) (0) | 2022.05.14 |
[프로그래머스] 외벽 점검 (Java) (0) | 2022.05.11 |
[프로그래머스] 셔틀버스 (Java) (0) | 2022.05.07 |
[프로그래머스] 주차 요금 계산 (Java) (0) | 2022.05.06 |