Algorithm(알고리즘)/Greedy Algorithm

3) 최소 지각 벌금 문제

고로케 2021. 5. 16.
반응형

3. 최소 지각 벌금 문제 

n 명이 프린트를 하는 동안 1분씩 지체되어 지각을 한다.

리스트는 n명이 프린트 해야할 페이지 수(1장당 1분,분당 1$)

[1 , 3, 5]

1번 사람 1분 지각

2번 사람 1+3 분 지각

3번 사람 1+3+5 분 지각

...

리스트는 5명이 프린트 해야할 페이지 수(1장당 1분,분당 1$)

 

hint : 최소 프린트 숫자를 가진 사람 순서대로 진행한다.

 

풀이 (1)

def min_fee(pages_to_print):
    # 인풋으로 받은 리스트를 정렬시켜 준다
    sorted_list = sorted(pages_to_print)

    # 총 벌금을 담을 변수
    total_fee = 0

    # 정렬된 리스트에서 총 벌금 계산
    for i in range(len(sorted_list)):
        total_fee += sorted_list[i] * (len(sorted_list) - i)

    return total_fee

# 테스트
print(min_fee([6, 11, 4, 1]))
print(min_fee([3, 2, 1]))
print(min_fee([3, 1, 4, 3, 2]))
print(min_fee([8, 4, 2, 3, 9, 23, 6, 8]))

# 결과
# 39
# 10
# 32
# 188

풀이 (2)

def min_fee(pages_to_print):
    pages_to_print.sort()
    fee = 0
    total_fee = 0
    for i in pages_to_print:
        fee += i
        total_fee += fee
    return total_fee

# 테스트
print(min_fee([6, 11, 4, 1]))
print(min_fee([3, 2, 1]))
print(min_fee([3, 1, 4, 3, 2]))
print(min_fee([8, 4, 2, 3, 9, 23, 6, 8]))

# 결과
# 39
# 10
# 32
# 188

풀이 (1)

풀이 (2)

반응형

댓글