[python 파이썬] 백준 12813번 이진수연산

2021. 3. 2. 17:38Algorithm/BOJ

반응형
 

12813번: 이진수 연산

총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

이문제는 비트마스크 문제이다.

기본적인 비트연산자를 이용한 문제인데  not 연산자를 파악하는 데 시간이 걸렸다.

 

일반적인 not 연산자(~)를 쓰면 결과가 0b0100 -> -0b0101 이런식으로 나와서 not연산자를 사용하지 못했다. 

그래서 1의 보수쓰는 법으로 풀었다. 

 

~a를 구하기 위해서 (a가 세자리라면)

a^111(mask) 이렇게  xor 연산을 사용해 구하면 된다.

ex) a=101

101^111=010

 

mask값을 구하기 위해서는 이진수가 길이를 알아야하는데 문제에서 100000으로 주어졌기에 이용해서 풀면 된다.

 

a = int(input(),2) #2진수 입력을 10진수로 받기
b = int(input(),2)
n = 100000
mask = 2 ** n - 1
# print(type(bin(a|b))) #str
# 자리수 맞춰주기
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))

 

 

 

참고

 

이진수 입력 방법 

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

10진수->2진수

 

파이썬 10진수, 8진수, 16진수, 2진수 입력, 출력 방법 정리 (진법 변환)

파이썬 10진수, 8진수, 16진수, 2진수 입력, 출력 방법을 정리합니다. 파이썬 10진수, 8진수, 16진수, 2진수 입력 파이썬에서 기본 숫자 입력은 10진수다. 8진수를 입력하기 위해서는 숫자 앞에 0o를

withcoding.com

비트연산자

 

파이썬 비트연산자 사용법 정리 (Python 비트연산)

라즈베리파이 같은 하드웨어가 인기를 끌면서 (C언어 만큼은 아니지만) 파이썬으로 하드웨어를 제어하는 경우가 늘어나고 있습니다. 하드웨어 쉽게 제어하기 위해서는 비트연산자를 잘 사용할

withcoding.com

 

not 연산

 

[BOJ] 이진수 연산 (no.12813)

총 100,000 비트로 이루어진 이진수 A와 B가 주어진다. 이때, A & B, A | B, A ^ B, ~A, ~B를 한 값을 출력하는 프로그램을 작성하시오.첫째 줄에 이진수 A, 둘째 줄에 이진수 B가 주어진다. 두 이진수의 길

velog.io

문자열앞에 0채우기

 

[Python] 문자열 앞에 0 채우기

보통 문자열 앞에 0을 채우는 행동은 날짜를 문자열로 계산할 때 유용하게 사용됩니다. 예를 들어, 2월을 yyyy/mm/dd로 표시한다고 하면 2020/02/02 와 같이 표현할 수 있습니다. 이 때, 요구 사항때문

brownbears.tistory.com

 

반응형