Algorithm/백준_생각정리

백준_5545_최고의 피자(python)

코친남 2023. 4. 19. 14:08

※ 접근법

 n의 숫자가 크지 않았기 때문에 구현으로 풀어야겠다고 생각했다.

 

※ 풀이

1. 처음 도우만 선택했을 때 1원당 칼로리를 계산해놓는다.

2. 입력받은 칼로리를 리스트에 저장해놓고 내림차순으로 정렬한다.

3. 리스트에서 칼로리를 하나씩 보면서 1원당 칼로리를 계산하고 이전에 구했던 것보다 작아진다면 반복문을 탈출한다.

( 토핑의 가격은 하나로 고정돼있기 때문에 칼로리를 내림차순으로 정렬해놓으면 뒤로 갈수록 1원당 가격이 내려갈 수 밖에 없다.)

 

n = int(input())
a,b = map(int,input().split())
dow = int(input())
data = []
for i in range(n):
    data.append(int(input()))
data.sort(reverse=True)
money = a
kalori = dow
won = dow / a

for i in data:
    money += b
    kalori += i
    now = kalori / money
    if won < now:
        won = now
    else:
        break

print(int(won))

※ 회고

 처음에는 '/' 기호가 아닌 '//'로 계산했었다. 결국 몫만 필요하다고 생각했기 때문에 내린 결론이었다. 근데 하나 생각하지 못한 반례가 있었다. 근데 이 반례가 무엇인지 모르겠어서 질문 게시판에 자세하게 작성하다가 반례를 떠올리게 됐다. 차후에도 모르는 것이 있다면 무엇을 모르는지 자세하게 작성해보자. 해결하게 될 수 있을지도 모른다.