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