[백준] 부분수열의 합 (1182)(kotlin)

문제 설명

백준 1182번 문제 링크
문제 참고

입력 및 출력

» 입력

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

» 출력

첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다.

예제 입출력(테스트케이스)

입력 출력
5 0
-7 -3 -2 5 8
1

문제 풀이1

import java.util.Scanner

var N: Int = 0
var S: Int = 0
var count: Int = 0
var arr: IntArray = intArrayOf()

fun main(args: Array<String>) = with(Scanner(System.`in`)){
    N = nextInt()
    S = nextInt()
    arr = IntArray(N) { nextInt() }

    dfs(0, 0)

    if (S==0) println(count - 1)
    else println(count)
}

fun dfs(v: Int, su: Int) {
    if (v == N) {
        if (su == S) count++
        return
    }

    dfs(v + 1, su + arr[v])
    dfs(v + 1, su)
}

Debug1

debug1_image1 debug1_image2 debug1_image3 debug1_image4 debug1_image5