python-for-coding-test icon indicating copy to clipboard operation
python-for-coding-test copied to clipboard

ch11 ex06 우지의 먹방 라이브 이진탐색으로 풀어봤습니다

Open kyrie-eleison opened this issue 5 years ago • 0 comments

통과는 했습니다만, 교재에서 나온 풀이와 비교해 어떤게 더 적합한지 관련해서 의견 여쭙고 싶어 질문드립니다. 항상 교재 잘 보고 있습니다! 감사드립니다!

def solution(food_times, k):
    #이분탐색을 이용하여 풀이
    #round_num번 돌면서 먹은 음식의 양이 k보다 작을 때, 그 중 가장 큰 round_num을 구한다
    start, end = 0, max(food_times)
    while True:
        if start > end:
            round_num = end
            break
        
        mid = (start + end)//2
        left = 0
        for food in food_times:
            if food <= mid:
                left += food
            else:
                left += mid
                
        if left == k:
            round_num = mid
            break
        elif left < k:
            start = mid + 1
        else:
            end = mid - 1
            
    #round_num번 회전할 동안 먹은 음식의 양(=지난시간)을 구함
    left_time = 0
    for food in food_times:
        if food <= round_num:
            left_time += food
        else:
            left_time += round_num

    #round_num번 도는 동안 남은 음식들을 체크해가면서 하나씩 먹어가면서, 최초로 k를 넘는 index 구하기
    for i in range(len(food_times)):
        food = food_times[i]
        if food > round_num:
            left_time += 1
            
        if left_time > k:
            return i+1
        
    return -1

kyrie-eleison avatar Nov 27 '20 11:11 kyrie-eleison