(백준) (코틀린) 조합번호 1744

문제는 먼저 두 개의 우선 순위 대기열을 만든 다음 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()
}