https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(n, times):
answer = 0
# right는 가장 비효율적으로 심사했을 때 걸리는 시간
# 가장 긴 심사시간이 소요되는 심사관에게 n 명 모두 심사받는 경우
left, right = 1, max(times) * n
while left <= right:
# mid는 이분탐색 기준. 중간부터 탐색 시작.
mid = (left+ right) // 2
people = 0
for time in times:
# people 은 모든 심사관이 mid분 동안 심사한 사람의 수
people += mid//time
# 모든 심사관을 거치지 않아도 mid분 동안 n명 이상의 심사를 할 수 있다면 반복문을 나간다.
# mid 시간이 충분하다는 뜻
if people >= n:
break
# 심사한 사람의 수가 심사 받아야할 사람의 수(n)보다 많거나 같은 경우
if people >= n:
answer = mid
right = mid - 1
# 심사한 사람의 수가 심사 받아야할 사람의 수(n)보다 적은 경우
elif people < n:
left = mid + 1
# left > right 일 때의 answer가 최종 mid값
return answer
'◦ Algorithm > Python' 카테고리의 다른 글
프로그래머스 124 나라의 숫자 구현 (0) | 2023.04.21 |
---|---|
프로그래머스 점프와 순간이동 구현? (1) | 2023.04.20 |
백준 영역 구하기 bfs (0) | 2023.04.19 |
프로그래머스 가장 긴 팰린드롬 문자열 (1) | 2023.04.15 |
프로그래머스 디스크 컨트롤러 최소힙 (0) | 2023.04.12 |