프로그래머스(Programmers) 예산 - 문제보기 Level3임을 감안하면 쉬운 문제였지만 몇 가지 생각할 점이 있었다. 풀이를 시작하며 low값을 가장 적은 요청금액으로, high값을 가장 높은 요청금액으로 잡고 이분탐색을 실행하였다. 이때, 아래의 1, 2번이 문제가 되었다. 각 지방에서 요청한 예산의 총 합이 정부예산보다 적을 경우 이런 경우 모든 지방이 요청한 만큼 예산을 받을 수 있다. 따라서 예산 상한선은 가장 많은 금액을 요청한 지방의 금액이 된다. 정부예산이 가장 적은 요청금액보다도 적을 경우 처음에 low값을 가장 적은 요청금액으로 잡았기 때문에 위의 경우는 탐색범위에서 벗어난다. low를 1로 변경할까 하였지만 위의 경우를 미리 체크해주고 low값은 그대로 가져가기로 하였다. 각 지..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/wuc4R/btqCqNxQnwU/1qp7w2zkPhkGKMMUxveIEK/img.png)
이분탐색(Binary Search) 입력 : 정렬된 원소리스트, 찾을 값 시간복잡도 : log2 n 이분탐색 과정 정수 배열 int[] array = {2, 5, 8, 10, 15, 16, 19, 20}에서 int key = 8이 몇 번째에 위치해 있는지 찾는다고 가정하자. 가장 먼저 할 일은 탐색 범위를 정하는 것이다. 이 경우에는 주어진 정수 배열 전체를 기준으로 하므로 인덱스 0 ~ 7이 범위가 된다. 탐색 범위가 정해지면 해당 범위의 가운데에 위치한 값을 찾는다. 가운데 값은 탐색 범위의 마지막 인데스에서 첫 인덱스를 뺀 뒤 2로 나눈 수를 인덱스로 가지는 값이다. 이 경우는 (7 - 0) / 2는 3이므로 array[3]의 10이 가운데 값이 된다. key값과 가운데 값(10)을 비교한다. 1)..