본문 바로가기

Python 배우기

[외계어 배우기] Boolean 연산자들(문제#4 Telemarketers)

이제 문제#4 Telemarketers를 해결해 보자. 여기에서는 Boolean 연산자를 공부하고 이를 바탕으로 문제를 해결할 것이다. 우리가 해결할 문제는, 전화번호가 텔레마케터의 번호인지 판단하는 것이고, 전화번호는 네 자리라고 가정하자.

 

도전 과제: 다음 세 가지 조건을 모두 충족하는 4가지 숫자는 텔레마케터의 번호이다. 1) 첫 번째 순자는 8 또는 9이다. 2) 네 번째 숫자는 8 또는 9이다. 3) 두 번째와 세 번째 숫자는 동일하다.

 

입력: 한 줄에 숫자 하나씩, 총 네 자리 숫자를 제공하는 4줄

 

전화번호가 텔레마케터의 것인지 확인하고 전화를 받을지(answer) 말지(ignore) 결정해야 한다.

 

Boolean 연산자

도전 과제를 읽어보면 '모두'라는 단어와 '또는'이라는 단어가 쓰여있다. 이를 통해 생각해 볼 수 있는 것은, and 혹은 or이 사용된다는 것이다.

 

or 연산

or 연산자의 경우는 모두 false일 때만 false를 반환한다. 즉, 하나 이상이 True이면 True를 반환한다는 의미이다.

 

>>> True or True

True

>>> True or False

True

>>> False or True

True

>>> False of False

False

 

그런데 영어로 if the digit is 8 or 9라는 문장을 파이썬으로 그대로 digit == 8 or 9라고 표현하면 안 된다는 것이다. 저 문장을 컴퓨터가 알아듣게 표현하려면 digit == 8 or digit == 9라고 해야 한다. 

 

and 연산

and 연산자의 경우는 모두 True일 때만 True를 반환한다. 즉 나머지는 모두 False라는 의미이다.

 

>>> True  and True

True

>>> True and False

False

>>> False and True

False

>>> False and False

False

 

여기서 주의할 점은 연산자 우선순위이다. and의 우선순위는 or보다 높다. 예를 들어, True or False and False의 경우 False가 아니라 True가 반환되는 이유는 True or (False and False) 이기 때문이다. (물론 괄호를 써서 or 연산자가 먼저 실행되기 할 수도 있다.)

 

not 연산자

not 연산자의 경우는 True이면 False를, False이면 True를 반환한다.

 

>>> not True

False

>>> not False

True

 

not 연산자는 or와 and 보다 우선순위가 높다. 아참 그리고 관계 연산자가 and, or, not 보다 우선순위가 높다.

 

문제를 해결하기 전에 몇 가지 수학 법칙에 대해 알고 넘어가자.

 

드모르간의 법칙(DeMorgan's Laws)

Boolean 대수학의 맥락에서 드모르간의 법칙은 논리적 진술의 접속사(and)와 분리사(or)를 부정(not)을 통해 표현하는 데 사용됩니다. 

 

not(A and B)는 (not A) or (not B)와 동일합니다.

not(A or B)는 (not A) and (not B)와 동일합니다.

 

이러한 법칙은 복잡한 논리 표현을 단순화하는 데 사용할 수 있으며, 특히 컴퓨터 과학에서 더 효율적이거나 이해하기 쉬운 동등한 표현을 만드는 데 유용합니다. 

 

역/이/대우

덧, 우선 명제에 대해 알아보자. 가정과 결론(~이면 ~이다)으로 이루어진 그 내용이 참인지 거짓인지를 명확하게 판별할 수 있는 문장이나 식을 말한다.

 

Converse

문장의 역은 명제의 가정과 결론을 바꾸어 놓은 명제이다. 예를 들어 "If P, then Q(P  Q)" 형식의 주어진 명제의 역은 "If Q, then P"(Q → P)이다.

 

Inverse

문장의 이는 가정과 결론을 모두 부정하는 것이다. "If P, then Q"의 경우, 그 역은 "If not P, not Q"이다(¬P → ¬Q). 

 

대우Contrapositive 

문장의 대우는 가정과 결론을 부정하고 뒤집는 것입니다. "If P, then Q"의 경우, 대우는 "If not Q, not P"이다(¬Q → ¬P). 문장의 대우는 항상 원래 문장과 논리적으로 동일하다. 원래 문이 참이면 대우도 참이고, 그 반대의 경우도 마찬가지이다.

 

 

 

반응형