강의로 돌아가기
Sungwoo Ryan Hwang

입국심사 마치는 사람을 구할때 mid/time의 몫을 이용하는 이유

파이썬 기준으로

for time in times
    count +=mid//time

을 하는 이유에 대해서 궁금합니다. 정확히 말하면 잘 와닿지가 않습니다.
예를 들어서 예시 데이터에서 n=6,[7,10]이고 시간이 20초일때 빈 심사대인 (10초 심사대)로 가지 않고 1초를 기다린 후에
첫번째 심사대(7초 심사대)로 가는 과정이 있는데, count +=mid//time 처럼 단순한 식으로 저런 과정을 포함할수 있나에 대해서
의문입니다.
정리하자면 1초를 기다리는 등의 복잡한 과정이 있는데 mid//time같은 단순한 식으로 바뀌는것이 궁금합니다.

정말 많은 해설 풀이글을 찾아봤지만 기다리는 과정까지 포함한 설명이 없더라구요. 도움 부탁드립니다.

작성중인 코드―solution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def solution(n, times):

    # 어처구니 없는 long long 이슈
    # 최대 시간이 987654321보다 클때 
    # min(answer,mid)를 사용하기때문에 정답이 갱신되지 않음
    # answer=987654321


    answer = 987654321987654321

    # left, right = 1, (len(times) + 1) * max(times)
    left, right = 1, n * max(times)

    while left <= right:
        mid = (left + right) // 2

        done_num = 0

        done_num=sum(mid//time for time in times)

        # 원하는 만큼 수행했거나 더 수행했으므로
        # 시간을 줄여봐도됨
        if done_num >= n:
            answer = min(answer, mid)
            right = mid - 1
        # 원하는 만큼 수행하지 못했다면 시간을 늘여야함
        elif done_num < n:
            left = mid + 1

    return answer


if __name__ == '__main__':
    print(solution(6, [7, 10]))
1 개의 답변
올리브

접근 방법 자체를 다시 생각해보세요
이분 탐색으로 답을 찾는 작업은 작업 시간들을 비교해서 최적의 스케쥴을 찾는것이 아닙니다.

작업과정을 간략하게 말하자면 아래와 같으니 참고해보세요

  1. 처음에 middle 값을 대충 정함
  2. middle 시간안에 처리할 수 있는 총 사람수를 구함(done_num=sum(mid//time for time in times))
  3. [해당시간에 처리할수 있는 사람수]와 [목표 사람수]를 비교함

    * [처리할수 있는 사람수]가 [처리해야되는 사람수]보다 많으면 시간을 너무 여유있게 잡았음 -> 시간을 줄여봄
    
    * [처리할수 있는 사람수]가 [처리해야되는 사람수]보다 적으면 시간을 너무 빡빡하게 잡았음 -> 시간을 늘려봄
    
  4. [처리할수 있는 사람수]와 [처리해야되는 사람수]가 같으면

    * 스케쥴은 모르겠지만 아무튼 시간은 구했다! 끝!
    
  • CHANGUP HAN

    브라보

    CHANGUP HAN―2021.07.22 17:21
  • wh-jung0522

    설명 감사합니다~~

    wh-jung0522―2021.09.10 16:29
  • heumsi

    설명 감사합니다~

    heumsi―2022.03.08 01:34
  • mynghn

    최고..

    mynghn―2022.10.21 01:19
  • kshshkim

    👍

    kshshkim―2023.03.20 15:50
  • jiji

    최고에요...

    jiji―2023.03.20 23:52
  • 고라니즘

    설명 감사합니다.. 꼭 탐색에 필요한 정렬된 배열이 필요한 알고리즘이 아니었네요

    고라니즘―2024.07.18 21:13
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.