출처 : https://www.acmicpc.net/problem/12813
1. 문제 설명
총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오.
2. 접근 방식
파이썬에서 ~연산자는 비트 반전 후 ㅎ2의 보수로 만들어서 리턴한다고 한다. 당연히 ~A, ~B를 하면 될 줄 알았는데 아니였다.. 1의 보수를 만들어 주려면
1. A ^ mask(A의 자릿수만큼 1로 채운 것)
2. mask - A
위 두가지 방법을 사용하면 된다고 한다. (처음 안 사실)
3. 주석 달기 (변수 설명, 각 줄마다 문장으로 설명, 함수 설명)
a = int(input(), 2)
b = int(input(), 2)
n = 100000
mask = 2 ** n - 1
print(bin(a & b)[2:].zfill(n))
print(bin(a | b)[2:].zfill(n))
print(bin(a ^ b)[2:].zfill(n))
print(bin(a ^ mask)[2:].zfill(n))
print(bin(b ^ mask)[2:].zfill(n))
4. 분석 및 시간복잡도
비트마스킹 재밌다 ! 더 배워보자.