Code in

프로그래머스 깊이/너비 우선 탐색 타겟 넘버 with kotlin 본문

알고리즘 스터디_문제풀이

프로그래머스 깊이/너비 우선 탐색 타겟 넘버 with kotlin

heyhmin 2020. 8. 25. 13:46

프로그래머스 깊이/너비 우선 탐색 타깃 넘버 문제입니다.

IntelliJ에서의 풀이입니다.

val numbers: IntArray = intArrayOf(1, 1, 1, 1, 1)
val target: Int = 3
fun solution(numbers: IntArray, target: Int): Int {
    val arr: ArrayList<Int> = ArrayList()
    recursion(0, numbers, numbers[0], target, arr)
    recursion(0, numbers, numbers[0]*-1, target, arr)
    return arr.size
}
fun recursion(curIndex: Int, numbers: IntArray, curNum: Int, target: Int, arr: ArrayList<Int>){
    if (curIndex == numbers.lastIndex) {
        if (curNum == target)
            arr.add(curNum)
        return
    }
    recursion(curIndex + 1, numbers, curNum + numbers[curIndex + 1], target, arr)
    recursion(curIndex + 1, numbers, curNum - numbers[curIndex + 1], target, arr)
}

fun main() {
    println(solution(numbers, target))
}

 

URL: https://programmers.co.kr/learn/courses/30/lessons/43165

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+

programmers.co.kr

다른 사람의 풀이에서 Kotlin의 fold, run, map, count를 사용하여

더 간단하게 풀이하는 방법이 있음을 알 수 있었습니다.

Kotlin의 여러 기능을 더 익혀야 할 것 같습니다.

 

fold: Accumulates value starting with initial value and applying operation from left to right to current accumulator value and each element. Returns the specified initial value if the array is empty.

 

run: The context object is available as a receiver (this). The return value is the lambda result. run does the same as with but invokes as let - as an extension function of the context object. run is useful when your lambda contains both the object initialization and the computation of the return value. Besides calling run on a receiver object, you can use it as a non-extension function. Non-extension run lets you execute a block of several statements where an expression is required.

 

Map: A collection that holds pairs of objects (keys and values) and supports efficiently retrieving the value corresponding to each key. Map keys are unique; the map holds only one value for each key. Methods in this interface support only read-only access to the map; read-write access is supported through the MutableMap interface.

 

count: Returns the number of elements matching the given predicate.

 

Comments