반응형
모든 경우의 수를 구해야 계산을 할 수있다.
예를 들어 집합의 크기가 3일 경우
000, 001, 010, 011, 100, 101, 110, 111 의 8가지 경우의 수를 계산해서 더해야 한다.
비트 연산을 통해 모든 경우의 수를 계산했다.
비트 연산은 다시 블로그에 작성을 해야겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.io.FileInputStream; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Scanner sc = new Scanner(new FileInputStream("input.txt")); //Scanner sc1 = new Scanner(System.in); int n = sc.nextInt(); int s = sc.nextInt(); int[] arr = new int[n]; int result = 0; int sum = 0; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } //i는 0000~1111까지 for (int i = 1; i < 1 << n; i++) { int bit = i; //0000 을 //bit!=0 은 도중에 할게 없으면 컷 0000111 일떄 1뽑고 난후 0이므로 돌 필요가 없다. for (int j = 0; bit != 0; j++, bit >>= 1) { //첫번째 자리가 0이면 j는 구할필요가 없다. ex) 10010일때 j의 자리는 0이므로 뽑을 필요가 없기 때문이다. if ((1 & bit) == 0){ continue; } sum = sum + arr[j]; } if (sum == s) { result++; } sum = 0; } System.out.println(result); } } |
반응형
'나는요 공부가 좋....은걸... > 알고리즈음' 카테고리의 다른 글
[BOJ] 백준 10409 - 서버 (자바) (0) | 2018.01.08 |
---|---|
[BOJ] 백준 10989 - 수 정렬하기 3 (자바) (3) | 2018.01.08 |
[BOJ] 백준 1026 - 보물 (자바) (0) | 2017.12.05 |
[BOJ] 백준 7785 - 회사에 있는 사람 (자바) (1) | 2017.11.20 |
[BOJ] 백준 10828 - 스택 (자바) (0) | 2017.11.20 |