이분탐색 4

[3079] 입국 심사 in python

문제에서 주어진 예시를 토대로 돌아가는 방식을 이해하기 위해 위와 같이 그림을 그려봄. 입국심사대가 1개일 경우에는 반복문을 돌릴필요 없이 m명을 곱해주면 된다. 입국심사대가 여러 개 일 경우가 문제이다. 이분 탐색 문제라고는 생각도 못했는데 이분탐색을 이용하여 푸는 문제였다 0_0 ! 내가 생각했던 방식으로 구현하려고 하니 머리가 지끈거렸는데 이분 탐색을 이용하면 쉽게 구할 수 있었다 ㅎ .. cnt=0 for time in Times: cnt+=mid//time -> 이 식을 이용하면 되는데 이 식을 떠올리지 못했다... 흑 n=2, m=6 Times=[7,10]의 예시로 들어보면 일단 최솟값은 28초이다. mid를 28초라고 치자. 위 반복문이 돌아가는 걸 확인하면 28//7 = 4 28//10 =..

[6236] 용돈관리 in python

이분탐색으로 풀어야하는 문제 인출금액(k)와 인출횟수(cnt)의 값은 반비례한다는 것에 주목해야 한다. 통장에서 인출하는 금액의 값이 이용금액보다 모자라게 되면 남은 금액은 통장에 집어넣고 다시 k원을 인출한다. 그러면 인출하는 횟수는 늘어나게 된다. 따라서 인출하는 금액의 값이 인하되어야 인출하는 횟수를 늘릴 수 있기 때문에 반비례 관계라고 말할 수 있다. 계산한 cnt (인출횟수)의 값이 m값보다 작으면 -> k의 값을 감소시켜야하므로 right=mid-1 cnt의 값이 m값보다 크거나 같으면 -> k의 값을 증가시켜야하므로 left=mid+1 # 1/12일 n, m = map(int, input().split()) array = [int(input()) for _ in range(n)] left =..

[6236] 용돈관리 in python

이분탐색으로 풀어야하는 문제 인출금액(k)와 인출횟수(cnt)의 값은 반비례한다는 것에 주목해야 한다. 통장에서 인출하는 금액의 값이 이용금액보다 모자라게 되면 남은 금액은 통장에 집어넣고 다시 k원을 인출한다. 그러면 인출하는 횟수는 늘어나게 된다. 따라서 인출하는 금액의 값이 인하되어야 인출하는 횟수를 늘릴 수 있기 때문에 반비례 관계라고 말할 수 있다. 계산한 cnt (인출횟수)의 값이 m값보다 작으면 -> k의 값을 감소시켜야하므로 right=mid-1 cnt의 값이 m값보다 크거나 같으면 -> k의 값을 증가시켜야하므로 left=mid+1 # 1/12일 n, m = map(int, input().split()) array = [int(input()) for _ in range(n)] left =..

[2512] 예산 in python [이분탐색]

전형적인 이분 탐색 문제! 오랜만에 풀었던 탓인지 이분 탐색 구현하는 데 있어서 사알짝 버벅..버벅..거렸다.. (열심히 하자..) 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정한다. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상인 예산요청에는 모두 상한액을 배정한다. 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다. 여러번의 실패를 경험한 가장 중대했던 이유 start의 초기값을 0으로 설정해뒀기 때문 ^^ 다시 정리해두자! (1) 초기값 설정 - start=0 - end=max(리스트) (2) 반복문 조건 설정 while start