무지의 먹방 라이브

INGBEEN·2021년 11월 2일
0

알고리즘 문제

목록 보기
7/20

문제 설명

https://programmers.co.kr/learn/courses/30/lessons/42891

<입출력 예>
food_times : [3, 1, 2]
k : 5
result : 1

<입출력 예 설명>
0~1초 동안에 1번 음식을 섭취한다. 남은 시간은 [2,1,2] 이다.
1~2초 동안 2번 음식을 섭취한다. 남은 시간은 [2,0,2] 이다.
2~3초 동안 3번 음식을 섭취한다. 남은 시간은 [2,0,1] 이다.
3~4초 동안 1번 음식을 섭취한다. 남은 시간은 [1,0,1] 이다.
4~5초 동안 (2번 음식은 다 먹었으므로) 3번 음식을 섭취한다. 남은 시간은 [1,0,0] 이다.
5초에서 네트워크 장애가 발생했다. 1번 음식을 섭취해야 할 때 중단되었으므로, 장애 복구 후에 1번 음식부터 다시 먹기 시작하면 된다.


나의 풀이 1 -> (실패)

def solution(food_times, k):
    answer = 0
    temp = 0
    while True:
        for i in range(len(food_times)):
            if temp == k:
                answer = i+1
                break
            if food_times[i] > 0:
                temp += 1
                food_times[i] -= 1
        if (sum(food_times) == 0) or (answer > 0):
            break
    if answer == 0:
        answer = -1
    return answer

책 풀이

import heapq

def solution(food_times, k):
    if sum(food_times) <= k:
        return -1

    q = []
    for i in range(len(food_times)):
        heapq.heappush(q, (food_times[i], i + 1))

    sum_value = 0
    previous = 0

    length = len(food_times)

    while sum_value + ((q[0][0] - previous) * length) <= k:
        now = heapq.heappop(q)[0]
        sum_value += (now - previous) * length
        length -= 1
        previous = now

    result = sorted(q, key = lambda x: x[1])
    return result[(k - sum_value) % length][1]

다른 사람 풀이

def solution(ft, k):
    answer = 0

    while k > 0 :
        a = k // (len(ft) - ft.count(0) )
        b = k % (len(ft) - ft.count(0) )

        for i, j in zip(ft, range(len(ft))):
            if ft[j] != 0:
                ft[j] = i - a
                if ft[j] < 0:
                    b = b + abs(ft[j])
                    ft[j] = 0
            k = b

        if len(ft) - ft.count(0) ==0:
            return -1

        if k+1 <= len(ft) - ft.count(0):
            for i in ft:
                answer += 1
                if i !=0 :
                    k -= 1
                if k == -1:
                    return answer

느낀 점

...

profile
No Excuses

0개의 댓글

관련 채용 정보