본문 바로가기
자료구조&알고리즘

[백준] 11650번 : 좌표 정렬하기 (Kotlin)

by JongSeok 2023. 1. 7.
 

11650번: 좌표 정렬하기

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

www.acmicpc.net

나의 풀이

fun main(args: Array<String>) {
    val n = readLine()!!.toInt()
    val arr = ArrayList<Pair<Int,Int>>()

    repeat(n) {
        val input = readLine()!!.split(" ")
        arr.add(Pair(input[0].toInt(), input[1].toInt()))
    }
    
    arr.sortWith(compareBy({it.first}, {it.second}))
    
    repeat(n) {
        println("${arr[it].first} ${arr[it].second}")
    }
}

저는 두 개의 변수를 묶어서 비교하기 위해 Pair를 이용했습니다.

☞ Pair 객체에 입력을 저장하고 ArrayList에 추가 → 오름차순 정렬하되 compareBy() 구문으로 arr의 첫 번째 변수로 비교하여 정렬한 후 두 번째 변수로 정렬

 

Pair는 데이터 클래스로 이루어진 객체로 자료형에 관계없이 두 개의 변수를 묶어서 관리할 때 유용합니다.

val pair1 = Pair("Hello", "Hi")     // <String, String>
val pair2 = Pair("Hello", 12345)    // <String, Int>
println("${pair1.first} ${pair2.second}")    // Hello 12345

val triple = Triple("Hello", "Hi", "12345")
println("${triple.first} ${triple.second} ${triple.third}")    // Hello Hi 12345

sortWith()와 compareBy()의 사용법은 다음과 같습니다.

array.sortWith(compareBy({    // Collection 자료구조의 array
    { 조건 A },   // 조건 A에 대한 정렬을 수행한 후
    { 조건 B }    // 조건 A에 만족하면서 조건 B에 대한 정렬
}))

 

728x90
반응형