<Algorithm> 139. 입국심사(SWExpert)
by BFine반응형
1. 입국심사(SWExpert)
이분탐색 문제
이문제를 딱 봤을때 이분탐색 문제일 것이라고 전혀 생각을 못했다. 그리고 N과 M의 크기가 너무커서 완전탐색을 할수가 없었다.
N과 M의 크기로 힌트를 얻었어야 했는데 아무리 생각해도 어떻게 풀어야 하는지 감이 잡히질 않았다.
내 생각이 DFS, BFS, 완전탐색에만 머물러 있다는 것을 느낀 문제였고 다각도로 접근할 수 있는 시야를 키워야 겠다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import java.util.Scanner; public class Solution { static long[] rooms; static long max; static long n ; static long m; static long min; public static void main(String[] args) { Scanner sc = new Scanner(System.in); /****************************** * 이분탐색을 이용해서 시간을 기준으로 * 각 방당 수용할 수 있는 인원을 모두 * 구하고 필요한 인원을 수용할 수 있는 * 최소 값을 구한다. *******************************/ int T = sc.nextInt(); for(int t = 1; t <= T; t++) { n = sc.nextInt(); m = sc.nextInt(); max = -1; rooms = new long[(int)(n)]; for(int i = 0; i < n; i++) { rooms[i] = sc.nextInt(); max = Math.max(max, rooms[i]); } long start = 0; long end = max * m; min = end; binary(start, end); System.out.println("#"+t+" "+min); } } public static void binary(long start, long end) { if(start>=end) return; long mid = (start + end)/2; long capacity = 0; for(int i = 0; i < n ; i++) { capacity += mid/rooms[i]; } if(capacity < m) { binary(mid+1, end); }else { min = Math.min(min, mid); binary(start, mid); } } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 141. Maaaaaaaaaze(BJO) (0) | 2019.03.25 |
---|---|
<Algorithm> 140. 배열의 회전 (0) | 2019.03.25 |
<Algorithm> 138. K번째 접미어(SWExpert) (0) | 2019.03.23 |
<Algorithm> 137. 연산자 끼워넣기(BJO) (0) | 2019.03.23 |
<Algorithm> 136. 인구이동(BJO) (0) | 2019.03.22 |
블로그의 정보
57개월 BackEnd
BFine