[프로그래머스] 배열 만들기 5

devel_liz·2024년 12월 13일
1

코딩테스트

목록 보기
23/45

🗒 문제



📝 나의 문제풀이

class Solution {
    fun solution(intStrs: Array<String>, k: Int, s: Int, l: Int): IntArray {
        var result = mutableListOf<Int>()
        intStrs.map{
            if(it.substring(s,s+l).toInt() > k) result.add(it.substring(s,s+l).toInt())
        }
        return result.toIntArray()
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(intStrs: Array<String>, k: Int, s: Int, l: Int): List<Int> {
        return intStrs.map { it.substring(s, s + l).toInt() }.filter { it > k }
    }
}

위 사람 문제풀이가 좋아요 수가 많았으나 출제자의 정답 유형 자체를 변경하여 제출했기 때문에 다른 문제풀이를 추가로 덧붙인다.

class Solution {
    fun solution(intStrs: Array<String>, k: Int, s: Int, l: Int): IntArray {
        var answer: IntArray = intArrayOf()
        return intStrs.map { it.slice(s..(s+l-1)).toInt() }.filter { it > k }.toIntArray()
    }
}

🖊 문제 풀이 시 알면 좋을 것

  • array, List(MutableList)

    • array는 크기가 고정되어 있고 List는 크기가 가변적이다. 그러므로 정답의 크기가 정해져있지 않기 때문에 array보다는 List로 답을 만들고 toIntArray()로 변환해주는 방법으로 List를 쓰는 게 더 적합하다고 생각했다.

    • Array를 사용해야 할 때:
      • 크기가 고정된 컬렉션을 다룰 때.
      • 퍼포먼스가 중요한 경우.
      • Java와 상호 운용성을 고려해야 할 때.

    • List를 사용해야 할 때:
      • 크기가 가변적이고 데이터 추가/삭제가 필요한 경우.
      • 더 많은 유틸리티 메서드를 활용하고 싶을 때.
  • map

    • map 함수는 배열(Array), 리스트(List), 집합(Set) 등 다양한 컬렉션에서 사용 가능하다.
    • 컬렉션의 각 요소를 특정 변환(매핑) 함수에 적용한 후, 새로운 컬렉션을 반환한다.
    • 원래의 컬렉션은 변경되지 않는다(불변).
      • 배열에서 map 사용
        val numbers = arrayOf(1, 2, 3)
        val squared = numbers.map { it * it }
        println(squared) // 출력: [1, 4, 9]
      • 리스트에서 map 사용
        val list = listOf("1", "2", "3")
        val intList = list.map { it.toInt() }
        println(intList) // 출력: [1, 2, 3]
  • filter

    • 컬렉션의 요소 중 특정 조건을 만족하는 요소만 남겨 새로운 컬렉션을 반환하는 고차 함수입니다. 조건을 람다 함수로 정의하며, filter는 이 조건을 평가한 결과로 새로운 컬렉션을 생성합니다.
      • 배열에서 filter 사용
        val numbers = arrayOf(1, 2, 3, 4, 5)
         val evenNumbers = numbers.filter { it % 2 == 0 }
         println(evenNumbers) // 출력: [2, 4]

      • 리스트에서 filter사용
       val list = listOf("apple", "banana", "cherry")
       val filteredList = list.filter { it.startsWith("b") }
       println(filteredList) // 출력: [banana]
  • ArrayIntArray의 차이점

특징Array<T>IntArray
제네릭 지원 여부T 타입의 임의 객체 저장 가능정수형(Int)만 저장 가능
메모리 효율성객체 참조 저장(박싱, Boxing 필요)기본 자료형(Int)로 저장
동작 방식모든 타입 저장 가능(Array, Array)정수만 다루는 특화 배열
속도 및 메모리 효율성박싱/언박싱 오버헤드가 있음박싱/언박싱 오버헤드 없음

박싱(Boxing)이란?
Array는 Int를 객체로 포장(Boxing)하여 저장하므로, 박싱/언박싱 과정이 추가됩니다.
IntArray는 기본 자료형(Int)만 저장하므로 이 과정이 없고 더 효율적입니다.

profile
Android zizon

1개의 댓글

comment-user-thumbnail
2024년 12월 17일

오오 고차함수를 사용하셨군요 코테 풀 때 고차함수 꿀이조!

답글 달기

관련 채용 정보