[프로그래머스] 배열 조각하기

devel_liz·2025년 1월 15일
0

코딩테스트

목록 보기
42/45

🗒 문제



📝 나의 문제풀이

class Solution {
    fun solution(arr: IntArray, query: IntArray): IntArray {
        var tempArr = arr 
        query.forEachIndexed{idx, value -> 
            tempArr = if(idx % 2 ==0){
            tempArr.take(value + 1).toIntArray()
        }else{
            tempArr.drop(value).toIntArray()
            }
        }
        return tempArr
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(arr: IntArray, query: IntArray) = query.indices
        .fold(0 to 0) { (s, e), i -> if (i % 2 == 1) s + query[i] to e else s to s + query[i] }
        .let { (s, e) -> if (s == e) intArrayOf(-1) else arr.copyOfRange(s, e) }
}

🖊 문제 풀이 시 알면 좋을 것

  • take(n)

    • 배열 또는 리스트에서 앞에서부터 n개의 요소를 가져옴.
    • 반환 타입: List
      val arr = listOf(1, 2, 3, 4, 5)
    println(arr.take(3)) // [1, 2, 3]
  • drop(n)

    • 배열 또는 리스트에서 앞에서부터 n개의 요소를 제외한 나머지를 반환.
    • 반환 타입: List
      val arr = listOf(1, 2, 3, 4, 5)
      println(arr.drop(2)) // [3, 4, 5]
  • fold(initial, operation)

    • 컬렉션을 순회하며 누적 작업을 수행.
    • 반환 타입: 누적 작업 결과 타입.
     val result = listOf(1, 2, 3).fold(0) { acc, value -> acc + value }
      println(result) // 6
    
  • copyOfRange(startIndex, endIndex)

    • 배열에서 startIndex부터 endIndex 직전까지의 요소를 복사.

    • 반환 타입: 배열과 동일한 타입

      val arr = intArrayOf(1, 2, 3, 4, 5)
       val subArray = arr.copyOfRange(1, 4)
        println(subArray.joinToString()) // 2, 3, 4
  • indices

    • 배열이나 리스트의 모든 인덱스 범위를 반환.
    • 반환 타입: IntRange
     val arr = listOf(10, 20, 30)
     println(arr.indices) // 0..2
  • let
    • 객체를 변환하거나 실행 블록을 전달받아 결과를 반환.
    • 반환 타입: 블록의 결과값
   val result = listOf(1, 2, 3).let { it.sum() }
   println(result) // 6
profile
Android zizon

0개의 댓글

관련 채용 정보