코틀린

[코틀린 / Kotlin] 리스트 중복 요소 제거

아는맛이무섭다 2024. 3. 25. 11:45
.distinct()
중복요소제거

 

 

리스트 내부에 있는 중복요소를 제거할 수 있는 함수입니다. 우선 작동이 되려면 .distinct()앞에 붙은 객체가 리스트여야합니다. 중복요소인지 체크하려면 해당 객체 안에 여러요소가 있어야하는 것이 전제조건인데, 만약 하나의 요소만 들어가있는 것 뒤에 중복제거를 해도 작동이 안될 가능성이 높습니다.

 

 

작동시키는 방법은 리스트 객체 뒤에 .distinct()를 붙여주면 끝납니다.

 

1. .distinct() / 중복요소 제거

이 함수를 이용하면 중복된 요소를 제거할 수 있습니다.

[input]

fun main() {
    val list = listOf('a', 'b', 'c', 'a', 'c')

    println(list.distinct())
}

[output]

[a, b, c]

 

2. .distinctBy() / 변환된 중복요소도 같이 제거

함수를 사용 요소를 변환하여 그 중복된 값으로 중복을 제거할 수도 있습니다.

[input]

fun main() {
    val list = listOf('a', 'A', 'b', 'B', 'c', 'A', 'a', 'C')

    println(list.distinct())
    println(list.distinctBy { it.uppercaseChar() })
    println(list.distinctBy { it.lowercaseChar() })
}

[output]

[a, A, b, B, c, C]
[a, b, c]
[A, B, C]

 

여담이지만 input에 println 두번째 줄에 있는 it.uppercaseChar는 모든 요소를 하나씩 쪼갠 후에 대문자만을 삭제하는 의미입니다. upper는 대문자, lower는 소문자입니다.

 

3. Set 중복요소 없이 저장

Set는 중복 없이 요소를 저장하는 객체로써, List를 Set으로 변환했다가 다시 List로 변경하면 중복된 요소가 제거됩니다.

[input]

fun main() {
    val list = listOf('a', 'b', 'c', 'a', 'c')

    val set = list.toSet()

    val newList = set.toList()

    println(newList)
}

[output]

[a, b, c]

 

Distinct는 중복요소가 많은 리스트에서 제거하는 것이라면, Set는 처음부터 중복요소 없이 저장합니다.

예시를 들자면 distinct는 [a, a, b, b] 에서 a, b를 하나씩 제거, Set를 사용하면 [a, a, b, b] 가 [a, b]로 저장됩니다. 처음부터 중복요소가 없던 것 처럼요.

 

[예제테스트]

여유가 되시는 분들은 한번 예제문제를 풀어서 익혀보시길 바랍니다. 중복문자제거 문제입니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이 및 해설

더보기

문제풀이 및 해설

 

my_string에서 .toCharArray()를 사용하여 my_string을 한 문자씩 쪼갭니다.
"appple" 을 'a' , 'p', 'p', 'l', 'e' 로 한번 변환시켜줍니다.

그리고 .distinct()를 이용하여 중복요소를 제거해줍니다.

하지만 위에서 solution 뒤에 :String이 붙어있기때문에, 저희는 이 요소를 Array가 아니라 String으로 돌려줘야합니다. 그렇기 때문에 맨뒤에 .joinToString("")을 붙여줘 다시 String 형태로 돌려놓습니다.

 

[원본링크]

 

Set - Kotlin Programming Language

 

kotlinlang.org

 

좋은 하루 되세요.