목록이분탐색 (13)
Dev.baelanche
문제 설명이 장황하지만 기타 레슨과 완전히 똑같은 문제이다. 입력값의 범위와 출력 패턴도 똑같아서 Ctrl + C, Ctrl + V 를 해도 된다;; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int a[] = new int[n]; int left = 0; int right = 0; for(int i=0; i left ? a[i] : left; right += a[i]; } while(left
이분 탐색으로 문제에서 요구하는 블루레이 크기를 구하는 문제다. 1. 최소값은(left) 레슨의 수 중 가장 작은값으로 한다. 2. 임의로 정한 블루레이 크기((left + right)/2)에 레슨을 순차적으로 담는다. 2-1. 레슨의 길이가 블루레이의 크기를 초과하게 된다면 블루레이 크기를 증가시킨다. 3. 블루레이의 개수가 m 보다 작다면 최대값(right)를 줄인다. 3.-1. 블루레이의 개수가 m 보다 같거나 크다면 최소값을 줄인다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int a[]..
기본적인 이분탐색에서 한번 꼬아낸 문제이다. 각 랜선의 길이 : L 나눌 단위 길이 : D 일때, L / D 의 합이 K 를 만족하는 선에서 최대 길이를 구해야 한다. public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = sc.nextInt(); int n = sc.nextInt(); int a[] = new int[k]; for(int i=0; i
나무 자르기 문제와 거의 유사한 문제이다. 예산을 더하는 로직만 약간 다를뿐 이분탐색으로 접근하면 된다. 코드 1 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n]; long sum = 0; int max = 0; for(int i=0; i
이분탐색을 입문하기 좋은 문제이다. 예제로 풀이해보겠다. 나무의 높이는 20, 15, 10, 17 이고 최소값은 0, 최대값은 20이다. 최대값은 나무의 높이 중 가장 큰 것으로 해도 되고 문제에서 주어진 최대값 1000000000 을 사용해도 된다. low 20 15 10 17 high 0 20 정한 low, high 을 2등분 하여 조건을 성립하는 방향으로 범위를 좁혀가야 한다. 0과 20의 중간값은 10 이므로 10의 높이로 나무를 자른다. low 20 15 10 17 high 0 10 5 10 7 20 각 나무는 10, 5, 10, 7 의 길이만큼 남았고 자른 나무는 10, 10, 0, 10 으로 총 30이다. 나무는 적어도 7만큼 가져갈 것이므로 30은 너무 크다. 따라서 자를 높이를 올려야 하..