[백준] 온라인 판매 (1246)
문제 설명
입력 및 출력
» 입력
첫째 줄에 정수 N(1≤N≤1,000)과 M(1≤M≤1,000)이 입력된다. 둘째 줄부터 M+1번째 줄까지 i+1번째 줄에는 Pi(1≤Pi≤1,000,000)가 입력된다.
» 출력
첫째 줄에 경래가 책정한 가격과 이 가격으로 올릴 수 있는 수익을 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
5 4 2 8 10 7 |
7 21 |
문제 풀이 (KOTLIN)
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val (N, M) = readLine().split(" ").map { it.toInt() }
val buyer = MutableList(M) { readLine().toInt() }.sorted()
var max = 0
var maxUnitPrice = 0
buyer.forEachIndexed { idx, price ->
if (N >= M - idx) {
val profit = price * (M - idx)
if (profit > max) {
max = profit
maxUnitPrice = price
}
} else {
val profit = price * N
if (profit > max) {
max = profit
maxUnitPrice = price
}
}
}
println("$maxUnitPrice $max")
}
문제 풀이 (KOTLIN)
import kotlin.math.min
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val (N, M) = readLine().split(" ").map { it.toInt() }
val buyer = MutableList(M) { readLine().toInt() }.sorted()
var max = 0
var unitPrice = 0
buyer.forEachIndexed { idx, price ->
val customers = min(N, M - idx)
if (max < customers * price) {
max = customers * price
unitPrice = price
}
}
println("$unitPrice $max")
}
문제 풀이 (SWIFT)
let NM = readLine()!.split(separator: " ").map { Int($0)! }
var customers = [Int]()
for _ in 0..<NM[1] {
customers.append(Int(readLine()!)!)
}
customers.sort(by: <)
var ans = 0
var price = 0
for i in 0..<NM[1] {
let eggs = min(NM[0], (NM[1] - i))
let sales = eggs * customers[i]
if ans < sales {
ans = eggs * customers[i]
price = customers[i]
}
}
print(price, ans)