calculatePass에서 answer를 찾는 과정에서 answer가 M 초과일 경우 break를 해줘야하더라구요, 안그러면 오버플로우가 발생하는 듯 합니다
3079번 - 입국심사
만약 10억 시간이 소요되는 창구 하나와 1의 시간이 소요되는 창구가 최대(9.999만개)로 존재할 경우를 생각해보면 됩니다.
이 경우 10억명의 사람이 존재한다면, 이분탐색은 다음과 같이 진행할 수 있죠
- 최대 소요시간(right) = 10 * 10억
첫 번째 루프에서 mid는 10억 * 5억이라는 값이 나오게 되고,
sum에 수용 가능한 각 창구의 인원을 누적합 하는 과정에서 1의 시간이 소요되는 창구 때문에
sum += 10억 * 5억 / 1 이라는 연산이 9.999만번 발생하게 되죠.
이경우 sum의 값이 대략 2^75로, long 타입의 범위인 2^64를 넘어 오버플로우가 발생하게 됩니다.
댓글을 작성하려면 로그인해야 합니다.
boysoeng 1년 전 1
이분탐색 많이 어렵네요
제가 짠 로직에서 어느 부분이 잘못되었는지 알려주시면 감사하겠습니다 ㅠㅠㅠ