저학년 때, xor, or , and 와 같은 이진수를 조작하는 연산을 배운적이 있다.
이를 알고리즘 문제를 푸는데 이용하여 수행시간을 빠르고 코드를 짧게 하여 푸는 문제들이 있다.
바로 비트마스킹 문제다!!
언젠가 공부해야지 해야지 했는데 이제야 한다.
1. AND ; 둘 다 1인 경우만 1이 된다. ("&")
2. OR ; 둘 중 하나라도 1이면 1이 된다. ("|")
3. XOR ; 두개가 달라야 (1,0 또는 0,1) 1이 된다. ("^")
4. NOT ; 0은 1으로, 1은 0이 된다. ("~")
5. shift ; 비트를 왼쪽 혹은 오른쪽으로 움직여 빈자리는 0으로 채운다. ("<<", ">>")
전부 1인 배열 만들기 : ( 1<< a ) - 1
예시)
A = (1<<10)-1 ; 10크기의 1로 채워져있는 배열
if __name__=="__main__" :
a = (1<<10)
b = (1<<10)-1
print(a)
print(b)
print(bin(a))
print(bin(b))
위 코드를 실행하면 다음과 같은 결과가 나온다.
(1<<10)을 하면 1뒤에 0이 10개가 붙게된다. (즉, 1 1개와 0이 10개) 2^10 == 1024이다.
여기서 1을 빼면 맨 앞 1이 사라지고 10개의 1이 된다. (즉, 1이 10개) (2^10)-1 == 1023 이다.
백준 비트마스크 문제 :
종이조각 : https://what-am-i.tistory.com/349?category=966524
[Python/BOJ] 백준 14391 종이조각 _비트마스킹
이 문제는 비트마스킹을 사용해 푼다. 이해하면 어렵지는 않은데 처음에 이해하기가 까다로웠다. 비트마스킹 관련 포스팅은 https://what-am-i.tistory.com/348 1 : 가로 (우측) 0 : 세로 (아래) 로 생각해서
what-am-i.tistory.com
외판원 순회
참고 블로그 :
비트마스크 (BitMask) 알고리즘
[목차] 1. 비트마스크(BitMask)란? 2. 비트마스크의 장점 3. 비트 연산자 4. 비트마스크를 이용한 집합 구현 * 종만북에 잘 설명되어 있어 기본적으로 종만북의 설명을 따릅니다. 1. 비트마스크(BitMask)
rebro.kr
'알고리즘 > 알고리즘 개념' 카테고리의 다른 글
여러 알고리즘 시간복잡도_재귀의 시간복잡도가 O(2^n)인 이유 (0) | 2022.09.14 |
---|---|
[python]유니온파인드 알고리즘_이것도 알아야해? (0) | 2022.08.24 |
[python]이차원 배열을 뒤집는 방법_zip(*list) (0) | 2022.08.03 |
순열을 구해보자. (중복 순열과 그냥 순열) (0) | 2022.07.19 |
[python 구현]DFS에서 꼭 필요한 개념 - 조합 (combination) (0) | 2022.07.11 |