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
블로그 이미지

Or71nH

,