본문 바로가기
코딩테스트

[프로그래머스] 할 일 목록

by liz_devel 2025. 1. 17.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(todo_list: Array<String>, finished: BooleanArray): Array<String> {
          return todo_list.toList().zip(finished.toList()) // 두 배열을 쌍으로 묶음
            .filter { (_, b) -> !b }   // 완료되지 않은 항목만 필터링
            .map { (a, _) -> a }       // 작업 이름만 추출
            .toTypedArray()            // 결과를 Array로 변환
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(todo_list: Array<String>, finished: BooleanArray): Array<String> {
        var answer: Array<String> = arrayOf<String>()
        return todo_list.filterIndexed {i, v -> finished[i].not()}.toTypedArray()
    }
}

🖊 문제 풀이 시 알면 좋을 것

zip 사용법

  • 설명: 두 리스트를 쌍으로 묶어 List<Pair<T, R>> 형태로 반환.
val list1 = listOf("Task1", "Task2")
val list2 = listOf(true, false)
val zipped = list1.zip(list2)
println(zipped) // [(Task1, true), (Task2, false)]

 

filter와 filterIndexed

  • filter: 조건을 만족하는 요소를 필터링.
val tasks = listOf("Task1", "Task2", "Task3")
val finished = listOf(false, true, false)
val unfinishedTasks = tasks.zip(finished).filter { (_, b) -> !b }
println(unfinishedTasks) // [(Task1, false), (Task3, false)]

 

  • filterIndexed: 요소와 인덱스를 기준으로 조건을 필터링.
  • 컬렉션의 인덱스와 값을 람다 함수로 전달하여 조건에 맞는 요소만 필터링.
  • 람다 매개변수:
    • index: 요소의 위치.
    • value: 요소의 값.
  • 반환값: 조건을 만족하는 요소들로 이루어진 새로운 List<T>.
val list = listOf("a", "b", "c", "d")
val result = list.filterIndexed { index, value -> index % 2 == 0 }
println(result) // 출력: [a, c] (짝수 인덱스)

 

map 사용법

  • 설명: 컬렉션의 요소를 변환하여 새로운 컬렉션 생성.
val zipped = listOf("Task1" to false, "Task2" to true)
val taskNames = zipped.map { (task, _) -> task }
println(taskNames) // [Task1, Task2]

 

불린값 반전 (not)

  • 설명: Boolean 값을 반전.
val isFinished = true
println(isFinished.not()) // false
반응형