[프로그래머스] 수열과 구간 쿼리 2

devel_liz·2024년 12월 2일
0

코딩테스트

목록 보기
13/45

🗒 문제



📝 나의 문제풀이

class Solution {
    fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
        val answer = IntArray(queries.size)
        queries.forEachIndexed{ idx, _ ->
            val (s, e, k) = queries[idx] 
            val filtered = arr.slice(s..e).filter { it > k }
            answer[idx] = filtered.minOrNull() ?: -1
        }
        return answer

    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
        return queries.map { (s,e,k) ->
            arr.slice(s..e).filter { it > k }.minOrNull() ?: -1
        }.toIntArray()
    }
}

🖊 문제 풀이 시 알면 좋을 것

  • slice

    • slice는 컬렉션에서 특정 범위의 요소를 추출하여 새로운 리스트를 반환하는 함수입니다.
      - arr.slice(s..e)는 배열 arr에서 인덱스 s부터 e까지의 요소를 추출합니다.
      - 반환 타입은 List입니다.
      val list = listOf(10, 20, 30, 40, 50)
      val result = list.slice(1..3) // 인덱스 1~3의 요소 [20, 30, 40]
      println(result)
      
      
  • minOrNull()
    - minOrNull()은 컬렉션의 최소값을 반환합니다.
    - 컬렉션이 비어 있으면 null을 반환합니다.
    - ?: 연산자를 사용해 null일 경우 대체 값을 지정할 수 있습니다.

    val list = listOf(5, 3, 8)
    val min = list.minOrNull() ?: -1 // 3
    
  • 엘비스 연산자

    • 엘비스 연산자는 왼쪽 피연산자가 null이 아닐 경우 해당 값을 반환하고, null일 경우 오른쪽 값을 반환합니다.
      val result = value ?: defaultValue
      
  • filter

    • filter는 조건을 만족하는 요소만 추출하여 새로운 리스트를 반환합니다.
      val list = listOf(1, 2, 3, 4, 5)
      val filtered = list.filter { it > 3 } // [4, 5]
      
  • 구조 분해 선언
    - 구조 분해 선언은 객체의 요소를 한 번에 여러 변수에 할당하는 Kotlin 문법입니다.

    val (a, b) = listOf(10, 20) // a=10, b=20
    val (x, y, z) = intArrayOf(1, 2, 3) // x=1, y=2, z=3

📌 마치며

slice라는 함수를 모르고 있었는데 알고 있었더라면 문제 풀이하는 데 많은 시간이 소요되지 않았을 것이다. 내 문제풀이에도 slice가 들어가있는데 엄청난 삽질과 구글링을 통해서 찾아낸 함수이다. 코딩 테스트를 하며 좋은 점은 평소 쓸 일 없는 함수까지 알게 된다는 것이다.

profile
Android zizon

0개의 댓글

관련 채용 정보