티스토리 뷰

 

1246번: 온라인 판매

첫째 줄에 정수 N(1 ≤ N ≤ 1,000)과 M(1 ≤ M ≤ 1,000)이 입력된다. 둘째 줄부터 M+1번째 줄까지 i+1번째 줄에는 Pi(1 ≤ Pi ≤ 1,000,000)가 입력된다.

www.acmicpc.net


1. 문제 내용

 

 

2. 접근 방식

  • 최대 수익은 최대한 가격이 높을수록 발생할 가능성이 높다.

따라서 우선 Pi를 내림차순 정렬한다. 이후 P0 가격 * 1개의 판매 가격과 P1 가격 * 2개의 판매 가격을 비교한다. 이것을 N > M일 경우에는 M번, N <= M일 경우엔 N번 반복하면서 최대 수익을 찾으면 된다.

 

  • Pi는 최대 100만 번 입력될 수 있으므로, input( ) 대신 속도가 빠른 sys.stdin.readline( )을 사용하자.

 

 

3. 정답 코드

import sys

input = sys.stdin.readline

n, m = map(int, input().split())
ps = [int(input()) for _ in range(m)]
ps.sort(reverse=True)

price = -1
profit = -1
loop = m if n > m else n
for i in range(loop):
    temp = ps[i] * (i + 1)

    if profit <= temp:
        profit = temp
        price = ps[i]

print(price, profit)
728x90