비트마스킹

·2026년 7월 17일

알고리즘 기법

목록 보기
97/97

260717_연습하기

{a,b,c,d} 로 나타낼수 있는 모든 경우의 수를 출력하라.

알고리즘 구현 생각하기

모든 경우의 수 생성

  • 1) 모든 경우의 수 생성
    => 4개의 원소의 선택하고 안하고를 나타내면 2의 4승이다.
    ==> 시프트 연산자를 이용해서 2의 배수를 나타낼수 있따.
    : 1 << 4; 로 나타낼수 있다.

각자리가 선택됬는지, 아닌지 확인.

  • 2) 0과 1을 가지고 선택 유무확인하자.

&연산은 2개의 비교대상이 모두 1이면 1인데,
이거를 가지고 각위치가 사용되었는지, 아닌지를 확인하자.

위에서 구한 (0000~1111) 을 전체 10진수로 표현한거일 뿐인거고, => 이를 타겟점 이라고 하자.

  • 이거를 가지고 선택하냐? 안하냐를 구분지어야 한다.
    -> 비트마스킹에서는 각 원소의 값에서 0을 선택안함, / 1을 선택함으로 구분지으므로 이거를 어떻게 이용할까? 생각하면 됨.

=> 4개의 원소를 대상으로 해서 선택하고, 안하냐를 나타내는 것이므로, 4번 시프트를 하면서 타겟점의 위치가 1이냐? 아니냐를 나타내야 함.

  • 가) 범위부터 만듦.

  • 나) & 연산자를 이용해서 0인지? 1인지? 를 알수 있다.
    -> 전체 타겟으로 잡힌 값에다가 한자리씩 시프트하면서 &연산을 하게 되면, 그 위치가 0인지? 1인지? 를 알수 있다.

  • 실행결과

관련 문제

  • 백준 1182
profile
🔥🔥🔥

0개의 댓글