❓ 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 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()
}
}
- strings 배열 안에 담긴 값을 비교하기 위해 다중조건을 통해 비교할 수 있는 메소드 sortedWith을 사용한다.
- sortedWith 내부의 compareBy 메소드를 이용하여 strings 안의 각 요소 it의 n번째 값을 비교하고 정렬한다. 만약 it의 n번째 값이 같을 경우 사전순으로 오름차순 하기 위해 두 번 째 조건에 it 그대로를 조건으로 준다.
- 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({}, {}) 각 중괄호 부분에 조건을 적음으로서 다중조건을 줄 수 있다.
❗출처
'Kotlin' 카테고리의 다른 글
Kotlin 문법 : 상속과 추상화 (0) | 2024.06.12 |
---|---|
문제해결 : unresolved reference: add (0) | 2024.06.07 |
Kotlin 문법 : filter (with. 프로그래머스) (0) | 2024.05.14 |
Kotlin 문법 : Int와 Long의 차이 (with. 프로그래머스) (0) | 2024.05.13 |
Kotlin 문법 : Char와 String (with. 프로그래머스) (0) | 2024.05.09 |