6056 : [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기(설명)(py)
출력값 |
두 값의 True / False 값이 서로 다를 경우만 True 를 출력하고, 그 외의 경우에는 False 를 출력한다. |
정답 및 가능한 정답
a,b=map(int,input().split())
print(bool(a) != bool(b))
a,b=map(int,input().split())
print(bool(a) ^ bool(b))
a, b=input().split()
a = bool(int(a))
b = bool(int(b))
print((a and (not b)) or ((not a) and b))
해설
bool 함수는 전달되는 변수에 어떤 값이 있으면 True를 반환, 없으면 False를 반환한다.
bool 함수에 값이 없는 0이나 0.0 빈 컨테이너, None인 경우에 False가 반환된다.
위 문제를 저는 3가지로 풀이해 봤습니다.
1. 비교연산자
!= 을 이용해서 두 값이 다를 때 True를 출력하도록 하였다.
2. 비트 연산자
파이썬에서는 2진수의 비트 단위에서 활용하는 연산자를 제공한다.
& : AND 연산, 둘 다 참일 때 만족
| : OR 연산, 둘 중 하나만 참이어도 만족
^ : XOR 연산 : 둘 중 하나만 참일 때 만족
~ : NOT 연산 : 보수 연산(0과 1을 바꿈)
<< : 왼쪽 시프트 연산, 변수의 값을 왼쪽으로 지정한 비트 수만큼 이동
>> : 오른쪽 시프트 연산, 변수의 값을 오른쪽으로 지정한 비트 수만큼 이동
bool 값은 True일 때 1, False일 때 0이므로 비트 연산자를 사용 가능하다.
위 문제는 둘의 값이 다를 경우 참이므로 XOR 연산이다.
^연산자를 활용한다. bool(a) ^ bool(b)
3. 부울 함수식(Boolean Functions)
두 값이 서로 다를 경우에만 True를 출력하는 데에서 XOR 연산인 것을 알 수 있고
XOR 연산의 논리식은 x'y + xy' 형태라는 것을 알 수 있다.
그래서 (a and (not b)) or ((not a) and b) 형태로 구현할 수 있다.