반응형

백준에서 이 문제를 풀다가 data class에서 두 가지로 compare해서 priority queue를 만들어야 할 경우가 생겼다.

해당 문제에서는 바이러스의 번호를 우선으로 하고, 그 다음에는 시간으로 우선을 하여 정렬을 하는 priority queue를 써서 풀었어야 했다. 지금까지는 data class에서 하나만 비교해서 정렬을 하는 prioirty queue를 썼으면 됐는데, 처음으로 두 가지로 비교해서 사용해봤었다. 

 

- data class에서 한 가지로 Priority를 비교할 때는 아래와 같이 했었다.

    data class Node(val i: Int, val j: Int, val cost: Int) : Comparable<Node> {
        override fun compareTo(other: Node): Int = cost - other.cost
    }

- 그런데 아래와 같이 사용하면 하나 이상의 값으로 data class를 비교할 수 있다.

    data class Virus(val x: Int, val y: Int, val v: Int, val time: Int) : Comparable<Virus> {
        override fun compareTo(other: Virus) = compareValuesBy(this, other, { it.time }, { it.v })
    }

compareValuesBy를 사용하면 여러 값으로 data class의 우선 순위를 정할 수 있다. 위 코드는 time을 오름 차순으로 정렬하고, time도 같다면 v를 오름차순으로 정렬한다.

반응형

+ Recent posts