https://www.acmicpc.net/problem/12813
100,000 자리수인 비트연산을 진행하는 기본 문제이다.
not 연산자 '~'를 그대로 사용하게 되면 안된다.
파이썬 NOT
- 비트 반전 후, 2의 보수로 만들어서 리턴한다.
- 비트 반전 -> 1의 보수 -> 2의 보수 -> 음수 부호 붙여서 리턴함
정수형으로 다루기 때문에 저런 과정을 거치는 것 같다. 우리가 원하는 NOT연산은 1의 보수까지이기 때문에 직접 해주어야 한다.
파이썬에서 1의 보수 얻는 방법
(A가 원래 이진수, mask는 A의 자릿수만큼 1로 채운 것)
~A & mask
A ^ mask
mask - A
세가지 방법중 원하는걸 쓰면 된다. 1번째 방법은 자기 자신만 나오지만 파이썬은 형태가 특별하기 때문에 마스크로 and연산만 다시 해주면 1의보수 형태로만 나온다.
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))
참고: https://velog.io/@wisepine/BOJ-%EC%9D%B4%EC%A7%84%EC%88%98-%EC%97%B0%EC%82%B0-no.12813