WonYong-Jang / algorithm

0 stars 0 forks source link

부분집합구하기( 비트마스킹, 비트연산자, 비트마스크) #7

Open WonYong-Jang opened 6 years ago

WonYong-Jang commented 6 years ago

SHIFT연산자 (<<, >>) : 모든 비트를 해당 방향으로 밀어줌 (곱셈, 나눗셈의 효과)

public class Shift {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int number =1; // 0000 0001
        System.out.println("원래 숫자 : "+ number); // 1 출력  

        number = number << 1; // 0000 0010
        System.out.println("왼쪽으로 1칸 쉬프트 : "+ number);// 2 출력  

        number = number << 2; // 0000 1000
        System.out.println("왼쪽으로 2칸 쉬프트 : "+ number);// 8 출력  

        number = number >> 1; // 0000 0100
        System.out.println("오른쪽으로 1칸 쉬프트 : "+ number);// 4출력    
    }
}

부분집합 구하기 : ( 1 << N ) == (2^n) 따라서 부분집합의 전체 갯수(공집합 포함) / 백준 1182

public class Subset {

    public static int[] arr = {1,2,3};
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int N = arr.length; // 배열 전체 길이  
        for(int i=0; i< (1 << N); i++) // 0 ~ 7 
        {
            for(int j=0; j < N; j++) // 원소의 갯수만큼 for문 
            {
                if( ( i&(1<<j) ) != 0 )// i의 j 번째 bit가 1인지 아닌지 확인
                {
                    System.out.print(arr[j]+" ");
                }
            }
            System.out.println();
        }
    }
}
출력 결과 
(공집합)
1
2
1 2
3
1 3
2 3
1 2 3
2018-06-19 12 53 30 2018-06-19 12 58 33
WonYong-Jang commented 4 years ago

leetcode 338 counting bits

각 숫자의 1의 마지막 위치만 찾아서 dp로 중복 계산 제거!!

스크린샷 2020-01-07 오후 10 18 17 스크린샷 2020-01-07 오후 10 18 23

참고 : https://codingdog.tistory.com/entry/leetcode-338-counting-bits-%EB%A7%88%EC%A7%80%EB%A7%89-%EC%BC%9C%EC%A7%84-%EB%B9%84%ED%8A%B8%EB%A7%8C-%EC%95%8C%EB%A9%B4-%EB%90%9C%EB%8B%A4