문제는 먼저 두 개의 우선 순위 대기열을 만든 다음 0보다 작은 숫자와 1보다 큰 숫자로 나누어 저장합니다.
둘째, 각 queue에서 데이터가 dequeue됨에 따라 곱해진 값과 둘의 합 중 더 큰 값이 변수에 추가되어 저장됩니다.
그냥 인쇄하십시오.
아래는 제가 작성한 코드와 제출 결과입니다.
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
//var bw = BufferedWriter(OutputStreamWriter(System.out))
var st = StringTokenizer(br.readLine())
val N = st.nextToken().toInt()
var pq = PriorityQueue<Int>(kotlin.Comparator { o1, o2 -> o2.compareTo(o1)})
var pq2 = PriorityQueue<Int>()
repeat(N){
st = StringTokenizer(br.readLine())
var value = st.nextToken().toInt()
if(value <= 0){
pq2.add(value)
} else {
pq.add(value)
}
}
var sum = 0
while (pq.size > 1){
var temp1 = pq.poll()
var temp2 = pq.poll()
if(temp1*temp2 > temp1+temp2){
sum += temp1*temp2
continue
}
sum += temp1+temp2
}
while(!pq.isEmpty()){
sum += pq.poll()
}
while (pq2.size > 1){
var temp1 = pq2.poll()
var temp2 = pq2.poll()
if(temp1*temp2 > temp1+temp2){
sum += temp1*temp2
continue
}
sum += temp1+temp2
}
while(!pq2.isEmpty()){
sum += pq2.poll()
}
println(sum)
//bw.flush()
//bw.close()
}
