알고리즘 문제들을 풀다 보면 해당 조합에 대해서 교집합 합집합 차집합들을 물어보는 문제가 많습니다. 코틀린은 이러한 요구들을 해결해 줄 수 있는 여러 함수들을 가지고 있습니다. 오늘은 그 함수들을 알아볼까 합니다.
합집합(union)
public infix fun <T> Iterable<T>.union(other: Iterable<T>): Set<T> {
val set = this.toMutableSet()
set.addAll(other)
return set
}
이처럼 mutableSet을 이용하여 2가지 연속적인 객체의 값들을 모두 넣어 Set자료형으로 반환하는 함수입니다.
교집합(intersect)
public infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {
val set = this.toMutableSet()
set.retainAll(other)
return set
}
합집합이랑 비슷하게 mutableSet을 이용합니다. retainAll이라는 함수를 이용하여 other를 제외한 나머지들을 삭제하여 Set자료형으로 반환하는 함수입니다.
차집합(subtract)
public infix fun <T> Iterable<T>.subtract(other: Iterable<T>): Set<T> {
val set = this.toMutableSet()
set.removeAll(other)
return set
}
합집합이랑 비슷하게 mutableSet을 이용합니다. removeAll이라는 함수를 이용하여 other들을 삭제하여 Set자료형으로 반환하는 함수입니다.
이처럼 코틀린은 여러 집합 연산에 대한 함수들을 제공하고 있습니다. 이는 분명 편리한 부분이 더 많겠지만 자료형이 mutableSet이기 때문에 이 부분은 메모리등 많은 자원을 소모하게 됩니다. 그렇기에 알고리즘 문제에서는 사용을 할 때 여러 번 생각한 후 사용해야 할 것 같습니다.
https://kotlinlang.org/docs/set-operations.html
'코틀린 > 문법및 라이브러리' 카테고리의 다른 글
[Kotlin] 단위 테스트 해보기(1) (0) | 2023.08.06 |
---|---|
[Kotlin] 여러 종류의 반복문 (0) | 2023.08.04 |
[Kotlin] Result class 가 뭐지? (0) | 2023.07.26 |
[Kotlin] Contract 로 스마트 케스팅 (0) | 2023.07.18 |
[Kotlin] 시퀀스(Sequence) 파보기 (0) | 2023.07.13 |