2019 KAKAO BLIND RECRUITMENT無知な食いしん坊生放送py


  • [食べる時間、食べ物の順番]一緒に並べ替え(食べる時間が短い順)
  • 第1ラウンド:k-n(*list[0])秒済南
  • 並べ替えで、一番前の食べ物を完食
  • kがゼロになるまで繰り返し文を終了する
  • 残り物は食べ物順
  • k、残りは放送再開
  • def solution(food_times, k):
        answer = []
        food_list = []
        key = 0
        
        # 전체 음식을 먹는 시간보다 k가 크거나 같다면 -1
        if sum(food_times) <= k:
            return -1
        
        for i in range(len(food_times)):
            food_list.append([i, food_times[i]])
        
        # 먹는데 걸리는 시간이 짧은 순으로 정렬
        food_list = sorted(food_list, key=lambda x:x[1])
    
        # 첫번째 음식은 다먹은 거 
        k -= food_list[0][1] * len(food_list)
        i = 0
        eat = 0
        while True:
            if k-eat < 0:
                break
            k -= eat
            i+=1
            eat = (food_list[i][1] - food_list[i-1][1]) * (len(food_list)-i)
            
        food_list = sorted(food_list[i:], key = lambda x:x[0])
        return food_list[k%len(food_list)][0]+1

    注意事項

  • whileゲート注意kは負数で終端しない.
  • 食べ終わったものは除外されるのでlen(food_list) - iのように除外してコードを書く.
  • food_list[i][1] - food_list[i-1][1]の理由はi-1を食べたためであり、それ以外はkの値を減らすためである.(これにより、food list値を更新せずにfood listの値を計算できますが、food listの値は更新されません.)
  • sorted(food_list[i:])理由はi-1が食べているのにドアが閉まっているから.