-
[BOJ - JAVA] 1182 - 부분수열의 합(백트래킹) 본문
728x90
반응형
# 주소
https://www.acmicpc.net/problem/1182
# 문제
# 문제 해설 및 코드 리뷰
import java.util.Scanner;
public class Main {
static int n,sum, count=0;
static int[] arr;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
n= sanc.nextInt();
sum= scan.nextInt();
arr = new int[n];
for (int i = 0; i <n ; i++) {
arr[i] = scan.nextInt();
}
dfs(0,0);
if(sum==0){
count--;
System.out.println(count);
}else {
System.out.println(count);
}
}
private static void dfs(int start , int i ){
if(start==n){
if(i == sum){
count++;
}
return;
}
dfs(start+1, i+arr[start]);
dfs(start+1, i);
}
}
간단했습니다.
i + arr[start]한 값이 sum과 같아질때마다 count를 1씩 증가시킵니다.
그리고 start의 개수는 n과 같아질 때만 적용이 되는 문제입니다.
또한 밑에 dfs를 2줄을 썼는데 이것은, start를 +1씩 해주면서 값을 증가시킬 수도, 아닐 수도 있을 때를
다 포함시키기 위해서입니다. 결과적으로 모든 경우의 수를 가지므로 부분수열의 합은 백트래킹 방식으로
구현하면 되겠습니다.
728x90
반응형
'백준 문제 풀이' 카테고리의 다른 글
[BOJ - JAVA] 2529 - 부등호(bfs, 브루트포스) (0) | 2021.10.08 |
---|---|
[BOJ - JAVA] 14889 - 스타트와 링크(백트래킹) (0) | 2021.10.06 |
[BOJ - JAVA] 14501 - 퇴사(DP) (0) | 2021.10.04 |
[BOJ - JAVA] 6603 - 로또(백트래킹, 재귀) (0) | 2021.10.04 |
[BOJ - JAVA] 1759 - 암호 만들기 (0) | 2021.10.03 |
Comments