Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- bfs dfs
- 폴더구조
- web view
- 자료구조
- 상속 관계 매핑
- 티스토리챌린지
- 경우의 수
- Project Bee
- 휴대폰 기기
- service 테스트
- 오블완
- react
- ReactNative
- 완전탐색
- Navigation
- 버튼 활성화
- 해외 대외활동
- 비트마스킹
- 창의충전소
- React Native
- FlatList
- 이영직
- 노마드코더
- 구현
- 백준 1992
- 원복
- springboot
- multipart upload
- React Natvive
- BFS
Archives
- Today
- Total
유미의 기록들
[알고리즘 -4] 비트마스킹 본문
728x90
반응형
이진수
우리가 평소에 사용하는 0~9의 수는 십진법이다
각각의 자리는 0 ~ 9 로 10개의 숫자로 표현된다
컴퓨터는 내부적으로 모든 자료를 0과 1로 표현하는 이진법으로 표현한다
10진수 21을 2진수로 표현해보면 10101 으로 표현한다
각각의 자리는 비트라고 하며 Binary Digit의 약어로 이진수와 같은 개념인 것을 알 수 있다
비트 연산자
비트끼리 연산을 할 수 있는 연산자가 있다
비트 연산자 활용법
1. idx 번째 비트 끄기
S & = ~ (1 << idx)
2. idx 번째 비트 XOR 연산 (0은 1로, 1은 0으로)
S ^ = (1 << idx)
3. 최하위 켜져 있는 비트 찾기
idx = (S & -S)
4. 크기가 n인 집합의 모든 비트를 켜기
(1 << n) - 1
이러한 비트를 하나의 배열처럼 쓰기 위해서 비트마스킹을 배운다
ex) 1111은 [1,1,1,1]로 0~3번째 요소가 '포함'되어 있다고 표현할 수 있다
크기가 4라면 (1<<4) -1 로 15 (1111) 가 나온다
5. idx번째 비트를 켜기
S | = (1 << idx)
6. idx번째 비트가 켜져있는지 확인하기
if ( S & (1<< idx ))
비트마스킹
정수의 이진수 표현을 자료구조로 쓰는 기법
boolean 배열의 역할을 하는 "하나의 숫자"를 만들어서 비트연산자를 통해 탐색, 수정 등의 작업을 하는 것을 말한다
장점
1. 수행시간이 빠르다
2. 코드가 간결하다
3. 메모리 사용이 적다
예를 들어 배열 [0,1,0,1] 으로 만들지 않고, 0101 라는 수를 이용해서 비트연산자를 통해 해당요소가 포함되어 있는지, 없는지 알 수 있는 것이다
비트마스킹을 이용한 모든 경우의 수
{사과, 딸기, 포도, 배}의 모든 경우의 수는 각각 요소는 포함하거나 없거나의 2가지 상태값을 가지기 때문에 2^4=16이
import java.util.*;
public class NumberOfCases{
public static void main(String[] args) {
String[] a={"사과", "딸기", "포도", "배"};
int n=a.length;
for(int i=0;i<(1<<n);i++){
StringBuilder ret=new StringBuilder();
for(int j=0;j<n;j++){
if((i&(1<<j))!=0){
ret.append(a[j]).append(" ");
}
}
System.out.println(ret);
}
}
}
728x90
반응형
'코딩테스트 기록 > 알고리즘 개념' 카테고리의 다른 글
[알고리즘 -6] 이분탐색, LIS (0) | 2024.04.30 |
---|---|
[알고리즘 -5] 그리디, 라인스위핑, 투포인터 (1) | 2024.04.24 |
[알고리즘 -3] 완전탐색, 백트래킹 (0) | 2024.03.13 |
[알고리즘 -2] 깊이 우선 탐색(DFS) vs 너비 우선 탐색(BFS) (0) | 2024.02.20 |
[알고리즘 -1] 시간복잡도, 빅오표기법, 공간복잡도 (0) | 2024.01.17 |
Comments