30개의 코딩테스트연습 문제 회고(map, filter의 활용)

neoneoneo·2024년 2월 27일
0

kotlin

목록 보기
14/49

약 30개의 코딩테스트 연습 문제들을 풀어봤다.

문제를 풀어나가면서 바로바로 어떤 방식들을 써야할지 캐치가 되어가고 있는데, 생각만 들고 실제로 구현에 활용하지 못하는 스킬들이 있다.

  1. map의 활용
  2. filter의 활용

이번 회고에서는 위 항목들을 정리해보고자 한다.


map의 활용

map이란?

  • Kotlin의 컬렉션에서 사용되는 함수 중 하나로, 각 요소에 대해 주어진 변환 함수를 적용하여 새로운 컬렉션을 생성하는 데에 사용된다.

map의 일반적인 형태

inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R>
  • Iterable : map 함수는 Iterable 인터페이스를 확장하므로, 리스트, 배열, 맵 등의 다양한 컬렉션에서 사용될 수 있다.
  • transform : (T) -> R : 각 요소에 적용될 람다 함수이다. T는 원래 컬렉션의 요소 타입이고, R은 변환 후의 타입이다.
  • List : 변환된 결과를 담은 새로운 리스트를 반환한다.

짚고 넘어가자면,

map을 잘 활용하려면 람다 함수에 대한 이해가 필요하다.
map은 최종적으로 List를 반환한다.

람다 함수가 뭔데?

  • 이름 없이 정의된 익명의 함수이다.
  • 일반적인 형태는 {파라미터 -> 본문} 이다.
    • 파라미터 : 람다 함수가 받아들이는 인자
    • 본문 : 람다 함수의 실행 코드
  • 두 개의 정수를 더하는 람다 함수 코드는 다음과 같다.
    val sum: (Int, Int) -> Int = {a, b -> a + b}
    • 두 개의 정수를 인자로 받아, 더하여 정수를 반환한다.

map과 람다 함수가 어떻게 함께 사용되는가?

  • map은 컬렉션의 각 요소에 대해 주어진 람다 함수를 적용하고, 그 결과를 새로운 컬렉션으로 반환한다.
    val numbers = listOf(1, 2, 3, 4, 5)
     val squaredNumbers = numbers.map {it * it}
     //[1, 4, 9, 16, 25]가 출력됨
    • it : 현재 순회 중인 리스트의 요소
    • it * it : 해당 요소를 제곱하는 람다 함수
    • 결과적으로 이 람다 함수가 map 함수에 전달되어 각 요소에 대해 제곱을 처리한 새로운 리스트가 생성된다.

filter의 활용

filter란?

  • Kotlin의 컬렉션에서 요소를 걸러내는 데 사용되는 함수이다. 조건을 만족하는 요소들로 이루어진 새로운 컬렉션을 반환한다.

filter의 일반적인 형태

inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T>
  • Iterable < T > : filter 함수는 Iterable 인터페이스를 확장하므로, 리스트, 배열, 맵 등의 다양한 컬렉션에서 사용될 수 있다.
  • predicate : (T) -> Boolean : 각 요소에 적용될 조건을 나타내는 람다 함수이다. T는 컬렉션의 요소 타입이고, Boolean은 조건의 결과이다.
  • List< T > : 조건을 만족하는 요소들로 이루어진 새로운 리스트를 반환한다.

짚고 넘어가자면,

filter 역시 잘 활용하려면 람다 함수에 대한 이해가 필요하다.
filter는 최종적으로 List를 반환한다.

한 가지 더 짚고 넘어가자면 map과 filter에서 반환하는 List의 타입이 약간 다르다.

  • filter : List< T >
    • T는 제네릭 타입 매개변수로 어떤 타입이든 될 수 있으며, 리스트가 어떤 타입의 요소를 저장할 지를 나타낸다.
      • 컬렉션에 데이터를 추가, 변경하는 작업
  • map : List< R >
    • R 또한 제네릭 타입 매개변수로 어떤 타입이든 될 수 있는데, 리스트가 어떤 타입의 결과를 반환할 지를 나타낸다. 주로 함수의 반환 타입으로 사용된다.
      • 컬렉션을 변환하여 결과로 돌려주는 작업

filter와 람다 함수가 어떻게 함께 사용되는가?

  • 람다 함수는 filter의 인자로 전달되어 각 요소에 대한 조건을 정의한다.
    val number = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
     val oddNumbers = numbers.filter {it % 2 != 0} 
     //[1, 3, 5, 7, 9]가 출력됨
    • it : 현재 순회 중인 리스트의 요소
    • it % 2 != 0 : 각 요소가 홀수인지 판별하는 람다 함수
    • 결과적으로 이 람다 함수가 filter 함수에 전달되어 조건을 만족하는 홀수로만 이루어진 새로운 리스트가 생성된다.
  • 즉, filter 함수는 리스트의 각 요소에 대해 람다 함수를 실행하고, 람다 함수의 반환 값이 true인 경우에는 해당 요소를 유지, false인 경우에는 제거한다.

[TIL-240227]

0개의 댓글