Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

난이도 : 실버 5
태그 : 정렬

 

 

설명

2차원 상에 존재하는 좌표들을 x 좌표 기준으로,

x 좌표가 동일하다면 y 좌표를 기준으로 정렬하는 문제입니다.

 

코틀린에서는 compareBy를 사용하여 다중 조건을 갖고 정렬할 수 있습니다.

x, y 인자를 갖는 Data Class인 Node를 만들고, Node의 x 값, 두번째로 Node의 y 값을 기준으로 정렬하면 됩니다.

 

 

소스코드

data class Node (val x: Int, val y:Int)

fun main() {
    val n = readLine()!!.toInt()

    val arr = Array<Node?>(n) { null }

    for(i in 0 until n) {
        val temp = readLine()!!.split(" ")
        arr[i] = Node(temp[0].toInt(), temp[1].toInt())
    }

    arr.sortWith(compareBy<Node?> { it!!.x }.thenBy {it!!.y})
    arr.forEach {
        println("${it!!.x} ${it!!.y}")
    }
}

 

 

후기

코틀린으로 다중 조건으로 정렬을 하는 법을 처음 알게 해줬던 문제였습니다

코틀린 특유의 람다식을 사용하면 간편하게 짤 수 있는 점이 맘에 드네요.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.