[프로그래머스] 입국심사 파이썬 풀이
[문제 링크]
https://programmers.co.kr/learn/courses/30/lessons/43238
[입출력 예]
n | times | return |
---|---|---|
6 | [7, 10] | 28 |
입출력 예 설명
가장 첫 두 사람은 바로 심사를 받으러 갑니다.
7분이 되었을 때, 첫 번째 심사대가 비고 3번째 사람이 심사를 받습니다.
10분이 되었을 때, 두 번째 심사대가 비고 4번째 사람이 심사를 받습니다.
14분이 되었을 때, 첫 번째 심사대가 비고 5번째 사람이 심사를 받습니다.
20분이 되었을 때, 두 번째 심사대가 비지만 6번째 사람이 그곳에서 심사를 받지 않고 1분을 더 기다린 후에 첫 번째 심사대에서 심사를 받으면 28분에 모든 사람의 심사가 끝납니다.
[소스코드]
def solution(n, times):
#1. 10억이란 범위에서 이분탐색을 예측한다.
#2. '정답'을 기준으로 이분탐색 범위를 구성한다.
#즉 left,right,mid,answer는 모든 사람의 총 심사시간이다.
#3. 최소 시간은 1분, 최대 시간은 가장 오래 걸리는 데서 모두 받는 n분이다.
#최소시간을 좀 더 타이트하게 잡으려면 min(times)로 하면 된다.
left, right = min(times), max(times)*n
print(left,right)
answer = None
mid=None
while(left<=right):
people=0
mid=(left+right)//2
for time in times:
if mid>time:
#4. 전체 소요시간보다 처리시간이 작다면!!! 이 조건 놓치기 쉽다.
#5. 그 시간으로 처리할 수 있는 사람만큼 합한다.
#6. 사람 한 명이 어디 갈지 고르는 상황을 상상하지말고
#모든 심사대가 꽉 찬 채로 가동된다고 생각하자.
#전체시간(=제한시간) 안에 처리할 수 있는 사람 수가 기준을 만족하는지
#아닌 지를 판단한다. 만족하면 제한시간을 좀 더 타이트하게
#만족 못하면 제한시간을 후하게
people+=mid//time
if people>=n:
answer=mid
right = mid -1
else:
left = mid +1
return answer
'PS > Programmers' 카테고리의 다른 글
[프로그래머스] 다단계 칫솔 판매 파이썬 (0) | 2021.11.11 |
---|---|
프로그래머스_정수삼각형 (0) | 2021.10.20 |
프로그래머스_추석트래픽 (0) | 2021.10.14 |
프로그래머스_표_편집 (0) | 2021.09.09 |
프로그래머스_N개의최소공배수_파이썬 (0) | 2021.09.09 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스] 다단계 칫솔 판매 파이썬
[프로그래머스] 다단계 칫솔 판매 파이썬
2021.11.11 -
프로그래머스_정수삼각형
프로그래머스_정수삼각형
2021.10.20 -
프로그래머스_추석트래픽
프로그래머스_추석트래픽
2021.10.14 -
프로그래머스_표_편집
프로그래머스_표_편집
2021.09.09