[백준] 부분수열의 합 (1182)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 정수의 개수를 나타내는 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