<링크>
https://www.acmicpc.net/problem/3079
<풀이>
그냥 무작정 찍기로 총 걸린 시간을 찍는다. 이 때 이분탐색으로 찍는다.
최대시간은 제일 오래걸리는 심사대*인원수 이다. (초기 right 값)
l=1
r=60
mid = 30
tot = 30/7 + 30/10 = 7 //총 걸린시간으로 몇명이 지나갔는지 확인 ( 30분동안 최대 몇명이 지나갈수있는가 )
->몫만 있으면 됨
이시간안으로는 총인원이 턱도없으면
시간을 늘려줘야되고
총인원보다 많은인원을 통과시킬수있으면 시간을 줄이고
총인원보다 같더라도 시간을 줄여봐야한다. 왜냐하면 어느게이트에 갔냐에 따라서 시간이 더 줄어들수있기 때문
right= 29
left=1
mid=15
tot=15/7+15/10=3 //모자름
r=29
l=16
m=22
tot=22/7+22/10 = 5 //모자름
r=29
l=23
m=26
tot=26/7+26/10=5 //모자름
r=29
l=27
m=28
tot=28/7+28/10=6 //충분
r=27
l=27
m=27
tot=27/7+27/10=5 // 모자름
●이분탐색 : 답을 찍어보는 경우에 사용된다
●이분탐색 다음 타겟 정하기 :
최적의 해를 구하는 과정에서
내가 구한값이 너무 작으면 더큰게 필요하니까 left=mid+1 해주고
구한값이 너무 크면 더 작은게 필요하니까 right=mid-1 해주고
구한값으로 만족하다면 ? (==일때는) -> 최적의해가 최소값이라면 right=mid-1 해서 더 줄여서 시도해본다.
최적의 해가 최대값이라면 left=mid+1 해주면된다.
어차피 이분탐색은 반복되더라도 l<=r일때까지만 하고 logN의 시간복잡도이기 때문에 끝까지 가봐도 시간이 충분하다.
'알고리즘 풀이 > 이분탐색' 카테고리의 다른 글
백준 2805 나무 자르기 (0) | 2018.08.30 |
---|---|
백준 13423 Three Dots (0) | 2018.08.02 |
백준 1939 중량제한 :: 들짐승 (0) | 2018.07.23 |