https://www.acmicpc.net/problem/1182
● 부분집합의 합 (1182번)
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c = sc.nextInt();
int[] a = new int[n];
for (int i=0; i<n; i++) {
a[i] = sc.nextInt();
}
int ans = 0;
for (int i=1; i<(1<<n); i++) { // 크기가 n인 모든 부분집합을 완성
int sum = 0;
for (int k=0; k<n; k++) {
if ((i&(1<<k)) != 0) { //i&(1<<k)를 통해 부분집합을 검사
sum += a[k];
}
}
if (sum == c) {
ans += 1;
}
}
System.out.println(ans);
}
}
↓ 소스풀이 ↓
우선, 비트마스크를 사용해서 문제를 풀었습니다.
for (int i=1; i<(1<
그리고나서, if ((i&(1<
처음입력받은 c변수와 sum이 같다면 ans를 더해줌으로써 갯수를 세어줍니다.
< 백준알고리즘 강의를 보고 참고하였습니다! >
'Dev. Etc > Algorithm' 카테고리의 다른 글
[JAVA] 백준 알고리즘 1697번 문제풀이 (숨바꼭질) (0) | 2019.11.10 |
---|---|
[JAVA] 백준 알고리즘 7576번 문제풀이 (토마토) (0) | 2019.11.09 |
[JAVA] 백준 알고리즘 15649번 문제풀이 (N과M) (0) | 2019.11.08 |
[JAVA] 백준 알고리즘 2750번 문제풀이 (수 정렬하기) (0) | 2019.11.07 |
[JAVA] 백준 알고리즘 10974번 문제풀이 (모든 순열) (0) | 2019.11.05 |
[JAVA] 백준 알고리즘 1978번 문제풀이 (소수 찾기) (0) | 2019.11.04 |
[JAVA] 백준 알고리즘 1929번 문제풀이 (소수 구하기) (0) | 2019.11.03 |
[JAVA] 백준 알고리즘 2609번 문제풀이 (최대공약수와 최소공배수) (0) | 2019.11.02 |