IFP 겨울방학 스터디 | 코드업 기초 100제 (8)

유재우·2022년 1월 25일
0

IFP-겨울방학 스터디

목록 보기
27/38

8. 기초-논리연산

  • 1(true, 참) 또는 0(false, 거짓) 이 입력되었을 때 반대로 출력하는 프로그램을 작성해보자.
    내 풀이)
rev = bool(input())
print(not rev)

강의 풀이)

boolean = int(input())
print( not boolean )

어차피 1, 0이 입력된다 했으므로 불리언형식으로 바꿀 필요가 없었다.

**참고**
파이썬에서 비교/관계 연산(==, !=, >, <, >=, <=)이 수행될 때,
0은 거짓(false)으로 인식되고, 0이 아닌 모든 수는 참(true)으로 인식된다.
참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서는
논리(logical)연산자 'not'를 사용할 수 있다.
이러한 논리연산을 NOT 연산이라고 부른다.
참, 거짓의 논리값(boolean value)인 불 값을 다루어주는 논리연산자는
'not', 'and', 'or'가 있다.
** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로
참/거짓만 가지는 논리값과 그 연산을 다룬다.

  • 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 참일 때에만 참을 출력하는 프로그램을 작성해보자.
    내 풀이)
a, b = map(bool, input().split())
if a == True and b == True:
    print('True')

강의 풀이)

a, b = map(int, input().split())
print( a and b )

파이썬에서는 AND연산값이 참이면 뒤에 있는 값을 출력하게 된다.

ex)
0 and 0 = 0
1 and 0 = 0
0 and 1 = 0
1 and 1 = 1

  • 두 개의 참(1) 또는 거짓(0)이 입력될 때, 하나라도 참이면 참을 출력하는 프로그램을 작성해보자.
    내 풀이)
a, b = map(int, input().split())
print(a or b)

강의 풀이)

a, b = map(int, input().split())
print(a or b)

파이썬에서는 OR연산값이 참이면 참인 값을 출력하게 된다.
ex) '참' or 0 >> '참
ex) 0 or True >> True


  • [우리밋이 알려주는 Bonus 문제 (1)]
    1개의 정수형 입력이 들어오면 논리 연산을 이용하여 '홀수'와 '짝수'를 판별하여라
    Tip::
    입력이 2로 나눠지면 짝수이고, 그렇지 않으면 홀수임을 이용한다.
    파이썬에서의 AND와 OR의 특징을 이용한다. => 파이썬에서는 이러한 연산을 "삼항 연산"으로 정의한다.(삼항연산은 Chapter 10에서 다룬다)
    내 풀이)
a = int(input())
if a % 2 and True == True:
    print('홀수')
else:
    print('짝수')

강의 풀이)

number = int(input())
print( number%2 and '홀수' or '짝수' )

내 풀이가 틀린건 아니지만 훨씬 간단하고 쉽게 작동되는 코드 구현도 익히자.


  • 두 가지의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 다를 때에만 참을 출력하는 프로그램을 작성해보자.
    내 풀이)
a, b = map(int, input().split())
print(not ((a and 1) and (b and 1)))

강의 풀이)

a, b = map(int, input().split())
print( (a and (not b)) or ((not a) and b) )

내 풀이에서는 두 값 모두 0(False)일 때에는 True가 나와 완벽히 구현하지 못했다.
이러한 논리연산을 XOR(exclusive or, 배타적 논리합)연산이라고도 부른다. 이를 표현하기 위해서는 (a AND (NOT b)) OR ((NOT a) AND b)처럼 하면 된다.


  • 두 개의 참(1) 또는 거짓(0)이 입력될 때, 참/거짓이 서로 같을 때에만 참이 계산되는 프로그램을 작성해보자.
    내 풀이)
a, b = map(int, input().split())
print((1 and a) and (1 and b))

강의 풀이)

a, b = map(int, input().split())
print( ((not a) and (not b)) or (a and b) )

  • 두 개의 참(1) 또는 거짓(0)이 입력될 때, 모두 거짓일 때에만 참이 계산되는 프로그램을 작성해보자.
    내 풀이)
a, b = map(int, input().split())
print((not a) and (not b))

강의 풀이)

a, b = map(int, input().split())
print( not(a or b) )

두 풀이다 같은 의미이다.

profile
끝없이 탐구하는 iOS 개발자 유재우입니다!

0개의 댓글