Card = [1,2,3,4,5,6,7,8,9,10,11,12]
Cardlen = len(Card)
Cardlist = []
for i in range(1<<Cardlen):
CatchCard = []
for it in range(Cardlen):
if i & (1<<it):
CatchCard.append(Card[it])
Cardlist.append(CatchCard)
/*
for i in range(1,int(input())+1):
many, hap = map(int, input().split())
search = []
for m in Cardlist:
if many == len(m):
search.append(m)
resurt = []
for k in search:
if sum(k) == hap:
resurt.append(k)
print("#{0} {1}".format(i, len(resurt)))
*/
해석
1<<Cardlen 은
0000 0000 0000 0001 을 변환한것이다
Cardlen 12 임으로 1을 왼쪽으로 12번 옴긴다
0001 0000 0000 0000 이 되게 되어
이것을 10 진수로 바꾸면
4096 임으로
4096 번 반복하게 된다
그리고 if i &(1<<it) 는
잘 봐야한다
it은 12번 반복하고 있다 즉 1~12 이다
그리고 i 는 위에서 준
0000 0000 0000 0000 ~ 0001 0000 0000 0000 이다
그중 맨앞이 비트가 같을때만 적는 다는 것이다
0000 1101 1100 0001 & (0000 0000 0000 0000 ~ 0001 0000 0000 0000 한칸씩 움직이는 1을 비교함)
0000 0000 0110 0001 & 0000 0000 0000 0001 은 true 인가??
true 이다 그럼으로 하나를 새로 만든다 이유는 &연산자 즉 둘 중 하나가 속하면 True를 반환하는거 같다
1024 2048 4096
그렇게 4096 2^12까지 다구한 집합체를 컴터가 준다
그렇게 집합이 모두다 완성된다
'+++++SW 일일 공부+++++ > SW Expert Aademy' 카테고리의 다른 글
SW 백트래킹 미로찾기 (0) | 2020.04.19 |
---|---|
SW 계산방법 (0) | 2020.04.19 |
stack (0) | 2020.03.26 |
객체지향 (0) | 2020.02.11 |
파이썬 문자열에 대하여 (0) | 2020.02.07 |