A B C D 를 선택할 수 있는 경우의 수를 구할 때, 0000 0001 0010 0011 0100 ... 식으로 0000에 1씩 더해주면 구할 수 있다.
따라서 총 선택 갯수는 2^4(아무것도 선택하지 않는 경우 포함) 이다.
그리고 경우를 선택한 경우 각 bit가 0인지 1인지 판단하기 위하여 0001을 left로 1bit씩 4번 shift 해준 후 & 연산을 해준다.(비트마스크 사용)
예를 들어, 0011 의 경우 각 bit가 0인지 1인지 판단하기 위하여
0011 & 0001 -> 0001 (1)
0011 & 0010 -> 0010 (2)
0011 & 0100 -> 0000 (0)
0011 & 1000 -> 0000 (0)
으로 결과가 0이 아닐 경우, ON(1)임을 판단할 수 있다.
<코드>
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 | import java.util.Scanner; class Solution { public static void main(String[] args){ byte bitMask = 0x00; char[] test = {'A','B','C','D'}; for(int i=0;i<Math.pow(2, 4);i++){ for(int idx=0;idx<9;idx++){ if((bitMask & (1<<idx))!=0) { System.out.print(test[idx]); } } System.out.println(""); bitMask+=0x01; } } } | cs |
<결과>
실행 결과
'공부 > Algorithm' 카테고리의 다른 글
[백준 알고리즘-DFS or DP] 퇴사 (0) | 2017.10.19 |
---|---|
[백준 알고리즘 - 백트래킹] 스도쿠 (0) | 2017.10.18 |
[삼성 SW EA] N-Queen 백트레킹 (0) | 2017.10.17 |
[삼성 SW EA - dfs] 보호필름 (0) | 2017.10.17 |
[삼성 SW EA] 미생물 격리 (다시 풀 것) (0) | 2017.10.09 |