티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/340212

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

- 이진탐색

 

def solution(diffs, times, limit):
    
    def calc(level):
        time = 0

        for j in range(len(diffs)):
            if diffs[j] <= level:
                time += times[j]
            else:
                time += (diffs[j] - level) * (times[j] + times[j-1]) + times[j]

            if time > limit:
                return False
            
        if limit >= time:
            return True
        
        return False
    
    
    
    if len(diffs) == 1:
        return 1
    
    start, end, mid = 1, max(diffs), 0
    
    while(start <= end):
        mid = (start + end) // 2

        if calc(mid):
            end = mid - 1
        else:
            start = mid + 1
    
    if calc(mid):
        return mid
    else:
        return start
공지사항
최근에 올라온 글
«   2024/11   »
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
글 보관함