[Python] 백준 1246번 : 온라인 판매

hjeu·2024년 12월 26일

백준

목록 보기
11/48

💡문제

백준 1246번 문제 링크

🍀풀이

문해력이 딸려서 처음 문제를 봤을 때 이해가 안갔다.
좀 생각을 해보니 그제야 이해가 되었다.

  1. 달걀은 최대 N개 판매할 수 있다.
  2. M명의 구매자가 있고, 각 구매자는 달걀을 구매하려는 최대 가격을 제시함(출력 두번째 줄)
  3. 달걀은 최대 한개씩만 판매
  4. 가격은 하나로 고정하고, 구매자는 자기가 제시한 가격 보다 높으면 구매하지 않음
  5. 최대 수익을 얻어야하는데 최대 수익 = 최대 가격 * 실제 판매 개수로 계산이 됨
  6. 여기서 실제 판매 개수는 판매 가능 달걀 수인 N과 구매 가능한 구매자 수 중 최소값이 됨

이렇게 이해를 하고 풀었다.

6번에서 왜 저 둘의 최소값이 실제 판매 개수가 되냐면,
예를 들어, 농부가 달걀을 최대 5개 팔 수 있는데 구매 가능한 사람이 3명뿐이라면, 실제 판매 개수는 3개가 되고,
반대로 구매자가 10명이고 농부가 달걀 5개를 갖고 있다면, 실제 판매 개수는 5개이므로 최소값으로 결정된다.


코드

n, m = input().split()
n = int(n); m = int(m)

max = 0         # 최대 수익
best_price = 0  # 최적 가격

p = [int(input()) for _ in range(m)]		

p.sort()

for i in range(m):
    buyers_cnt = m - i  # i 번째 이후의 구매자는 모두 p[i] 이상 낼 수 있음
    sell_cnt = min(n, buyers_cnt)   # 실제 판매 개수는 n과 구매 가능한 구매자 수 중 최소값임
    profit = p[i] * sell_cnt    # 수익 = 판매가격 * 구매 가능한 구매자 수
    
    # 최대 수익 갱신
    if profit > max:
        max = profit
        best_price = p[i]

print(best_price, max)

주석으로 설명은 했고, p = [int(input()) for _ in range(m)] 이 부분은 코드트리에서 파이썬 문법으로 배운 Comprehension 문법을 사용했다. 처음에 그냥 for문 안에 작성해서 했는데 내가 뭘 잘못 작성했는지 틀렸다고 나와서 Comprehension을 적용시켜 봤다. 파이썬 진짜 짱이네...


profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글