Kotlin

Kotlin 문법 : sort와 sorted (with. 프로그래머스)

깨비도 2024. 6. 5. 11:00

문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

💡 풀이

class Solution {
    fun solution(strings: Array<String>, n: Int): Array<String> {
        return strings.sortedWith(
            compareBy({ it[n] }, { it })
        ).toTypedArray()
    }
}
  1. strings 배열 안에 담긴 값을 비교하기 위해 다중조건을 통해 비교할 수 있는 메소드 sortedWith을 사용한다.
  2. sortedWith 내부의 compareBy 메소드를 이용하여 strings 안의 각 요소 it의 n번째 값을 비교하고 정렬한다. 만약 it의 n번째 값이 같을 경우 사전순으로 오름차순 하기 위해 두 번 째 조건에 it 그대로를 조건으로 준다.
  3. sortedWith은 반환 타입이 List이기 때문에 Array로 변환해 return 해주면 된다.

배열을 정렬할 수 있는 방법이 여러가지 있는데 그 중, sort와 sorted에 대해 비교해보고 다른 메소드들도 함께 살펴보겠다.

0. sort와 sorted

fun example(){  
    val arr = arrayOf<Int>(30, 10, 40, 70)
    arr.sort()
    
    println(arr) //10, 30, 40, 70
    
    val arr2 = arrayOf<Int>(1, 3, 7, 65, 2, 10)
    val sortedArr2 = arr2.sorted()
    
    println(arr2) //1, 3, 7, 65, 2, 10
    println(sortedArr2) //1, 2, 3, 7, 10, 65
}

일반적으로 오름차순으로 정렬할 때 사용하는 메소드다. 하지만 sort와 sorted의 큰 차이점은 바로 return값이다.

  • sort: Mutable List를 정렬
    • 데이터 변경이 가능한 리스트를 정렬한다. 자신이 갖고 있는 요소 순서를 바꾸고 자기 자신을 return 한다.
  • sorted: Immtuable List를 정렬
    • 데이터 변경이 불가능한 리스트를 정렬한다. 원본 배열은 변경하지 않고 정렬된 배열을 새로이 생성하여 return 한다.

이러한 특징은 이하 설명할 다른 메소드도 동일하게 적용된다.

1. sortBy와 sortedBy

fun example(arr: Array<String>){
    var sortedArray = arr.sortedBy{조건}
    arr.sortBy{조건}
}
  • 내가 원하는 조건을 입력함으로서 정렬할 수 있다.

2. sortWith와 sortedWith

fun example(arr: Array<String>){
    var sortedArray = arr.sortedWith(compareBy({조건1}, {조건2}))
}
  • sortWith은 sort와 마찬가지로 나 자신을 반환하고 sortedWith은 sorted와 마찬가지로 새로운 배열을 반환한다.
  • sortWith/sortedWith은 compareBy를 통해 정렬규칙을 내가 직접 지정해줄 수가 있다.
    • compareBy({}, {}) 각 중괄호 부분에 조건을 적음으로서 다중조건을 줄 수 있다.

❗출처

참고 사이트 : https://velog.io/@changhee09/Kotlin-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A0%95%EB%A0%ACsort-sortBy-sortWith

 

[Kotlin] 리스트 정렬(sort, sortBy, sortWith)

코틀린 - 정렬(sort, sortBy, sortWith)

velog.io