반응형
1. 입력 문자열을 숫자로 바꾸기
"34" 같은 문자열은 쉽게 숫자로 바꿀 수 있다. int로 감싸주기만 하면 된다.
num = "34"
int(num)
그런데 문자열이 "10111001"와 같이 0과 1만으로 이루어져있는 경우가 있다. 특히 비트 연산을 이용하여
풀어야 하는 문제의 경우 입력을 이와 같이 받게 되는 경우가 종종 생기는데,
그럼 이 문자열을 숫자로 고쳐줘야 한다.
이때 그냥 int로 감싸주면 정수 10111001(1천만 11만 1천 1)로 변환될 것이다.
이렇게 큰 수를 의도한게 아니므로 int로 변환시 이 문자열을 이진수로 인식하라는 명령을 내려줘야 하는데
파이썬에서는 다음과 같이 사용할 수 있다.
int 메소드의 두번째 인자로 진법 수를 넘겨주면 된다.
a = "10111001"
print(int(a, 2))
b = "0b10111001" ## 문자열 앞에 0b가 포함되어 있어도 가능하다.
print(int(b, 2))
>> 185
>> 185
그럼 이 변환된 수를 다시 받아 비트 연산에 사용하면 된다.
2. 비트 연산 할때 주의할 점
내가 자주 착각하는 것이 비트 연산을 하기 위해 두 수를 모두 2진수 형태로 바꿔줘야겠다고 생각하는데
비트 연산은 2진수 형태로 바꿔줄 필요가 없다.
print(2^6)
print(0b10^0b110)
print(2^0b110)
>> 4
>> 4
>> 4
3. 0 또는 1의 개수 세는법
count 메소드로 세는 것이 가능하다. 그런데 count 메소드는 숫자가 아닌 문자열 자료형에만 적용할 수 있다.
따라서 숫자를 문자열 형태로 변환해주는 과정이 필요하다.
방법은 숫자를 bin으로 감싸주면 된다. 이때 숫자가 꼭 2진수 형태일 필요가 없다.
기억해야 될 것은 bin으로 감싸주면 자료형이 숫자가 아닌 문자열 형식이 된다. (str)
num = 13
print(bin(num))
print(bin(num)[2:].count('0'))
print(bin(num)[2:].count('1'))
>> '0b1101'
>> 1
>> 3
num = 0b1101
print(bin(num))
print(bin(num)[2:].count('0'))
print(bin(num)[2:].count('1'))
>> '0b1101'
>> 1
>> 3
댓글