백준 문제 풀이 : 부분수열의 합(1182번)(Java)
문제
문제 확인하기
풀이
n
개의 정수들을 원소로 갖는 수열 arr
이 있을 때,
arr
의 부분 집합의 총 원소의 합이 s
인 경우가 몇개인지 구하는 문제이다.
n
의 최대값, 그러니까 수열 arr
의 최대 길이는 20이므로, 완전 탐색을 이용하여 문제를 해결할 수 있다.
단순히 모든 경우를 고려하면 된다.
n
이 4인 수열 {1, 2, 3, 4}가 주어졌다고 가정하자.
이 수열의 부분 집합은 {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}, {1, 2, 3}, {1, 2, 4}, {2, 3, 4}, {1, 2, 3, 4}가 존재한다.
이 부분 집합들을 하나씩 찾으면서 해당 부분 집합의 모든 원소의 합이 s
와 같아지는 경우의 수를 세면 된다.
비트 마스킹을 이용해서 문제를 풀어보았다.