본문 바로가기

공부하는 것들/알고리즘

백준 3061번: 사다리

https://www.acmicpc.net/problem/5545

 

5545번: 최고의 피자

상근이는 근처 피자 가게에서 매일 저녁으로 피자를 배달해 먹는다. 주머니 사정이 얇아진 상근이는 이번 달부터는 "최고의 피자"를 구매하려고 한다. 최고의 피자란, 피자 가게에서 주문할 수

www.acmicpc.net

 

이 피자 가게는 토핑 N개에서 여러 종류를 선택해서 주문할 수 있다. 같은 종류의 토핑을 2개 이상 선택할 수는 없다. 또, 토핑을 전혀 선택하지 않을 수도 있다.

도우의 가격은 A원이고, 토핑의 가격은 모두 B원이다. 피자의 가격은 도우와 토핑의 가격의 합계가 된다. 즉, 토핑을 k종류 (0 ≤ k ≤ N) 선택했다면, 피자의 가격은 A + B*k원이 된다. 

 

def solve(A,B, A_cal, B_cal):
    B_cal = sorted(B_cal, reverse = True)
    now_cost = A
    now_cal = A_cal
    now_eff = A_cal/A
    for i in range(len(B_cal)):
        next_cost = now_cost+B
        next_cal = now_cal+B_cal[i]
        next_eff = next_cal/next_cost
        if now_eff < next_eff: 
            now_cost, now_cal = next_cost, next_cal
            now_eff = next_eff
        else: break
    return int(now_eff)

if __name__=='__main__':
    N = int(input())
    A, B = list(map(int,input().split()))
    A_cal = int(input())
    B_cal = []
    for _ in range(N):
        B_cal.append(int(input()))
    ans = solve(A,B,A_cal,B_cal)
    print(ans)