백준 11723 비트 마스킹

박호준·2022년 1월 17일
0

Baekjoon

목록 보기
7/10

비트 마스킹

  • 정수 하나의 비트에 on off 하여 체크한다. (bool[32] 배열 사용하는 거와 비슷)

장점

  • 메모리를 적게 사용
  • 프로그램이 빠름

구현하기

출력

void	show(int *a) {
	for (int i = 32; i > 0; i--) {
    		cout << ((*a & (1 << (i - 1))) ? 1 : 0 );
       }
}

초기화(null)

void	init(int *a) {
	*a = 0;
}

모두 포함

void	full(int *a) {
	*a = -1;
}

i 번째 인덱스 삽입

void	set(int *a, int i) {
	*a |= (1 << i);
}

i 번째 인덱스 삭제

void	drop(int *a, int i) {
	*a &= ~(1 << i);
}

i 번째 인덱스 확인

bool	check(int *a, int i) {
	return (*a & (1 << i));
}

i 번째 인덱스 toggle (1 은 0으로 0은 1으로) (xor 연산 ^)

void	toggle(int *a, int i) {
	*a ^= (1 << i);
}

마지막 원소 구하기

int		getLast(int *a) {
	return (*a & -*a);
}

마지막 원소 삭제하기

void	dropLast(int *a) {
	*a &= (*a - 1);
}

TEST


int main () {
	int		a;
	
	full(&a);
	cout << "모두 포함\n";
	show(&a); cout << "\n";

	init(&a);
	cout << "null초기화\n";
	show(&a); cout << "\n";
	

	set(&a, 4);
	set(&a, 7);
	cout << "4, 7 추가\n";
	show(&a); cout << "\n";

	drop(&a, 4);
	cout << "4 삭제\n";
	show(&a); cout << "\n";
	
	cout << "7 확인 :" << check(&a,7) << "\n";

	toggle(&a, 7);
	toggle(&a, 3);
	toggle(&a, 2);
	cout << "2, 3, 7 togle\n";
	show(&a); cout << "\n";

	cout << "마지막 원소 구하기 : " << getLast(&a) << "\n";
	show(&a); cout << "\n";
	dropLast(&a);
	cout << "마지막 원소 삭제\n";
	show(&a); cout << "\n";

}
profile
hopark

0개의 댓글