제어문 1

선택 제어문인 조건문과 비교 연산자, 논리 연산자를 배우는 글 입니다.

조건문 - if / elif / else

비교 연산자 - == / != / < / <= / > / >=

논리 연산자 - and / or / not

조건문

조건문은 주어진 조건에 따라 코드를 돌아가게 하는 명령문입니다.

목이 마르면 물을 마시고, 아니면 안마셔야지
분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
맥주병은 유리병에 버리고, 나머지는 일반쓰레기에 버려야지

위와 같은 문장들이 조건문에 해당합니다.

if / else

조건문에서 가장 기본이 되는 함수는 if입니다. 단어 그대로 만약이라는 뜻을 가지고 있습니다. else는 if에 나온 상황이 아닌 경우에 해당하는 함수입니다.

코딩을 할 때는 if 옆에 조건을 적어서 해당 조건에 충족하면 if문 안에 들어있는 코드를 돌아가게 하고, 해당 조건에 충족하지 못하면 else문 안에 있는 코드를 돌아가게 만들어줍니다.

위에 예시를 든 문장으로 코딩을 하자면

if 목이 마르다:
    물을 마신다.
else:
    물을 마시지 않는다.

이렇게 작성 할 수 있습니다.

elif

분리수거 예시를 if - else문 코드로만 표현한다면 어떻게 될까요?

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
else:
    if item == 과자봉지:
        비닐에 버림
    else:
        if item == 맥주병:
            유리병에 버림
        else:
            일반쓰레기에 버림

이렇게 if - else문을 3개나 적어야 코드를 짤 수 있어서 손이 많이 갑니다.

그래서 필요한 것이 elif문 입니다. elif는 if와 같은 행동을 하지만 무조건 if 다음에만 올 수 있습니다.

위 코드를 elif를 사용하여 다시 짠다면 아래처럼 만들 수 있습니다.

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
elif item == 과자봉지:
    비닐에 버림
elif item == 맥주병:
    유리병에 버림
else:
    일반쓰레기에 버림

그래서 만약 10가지 상황이 나온다면 1개의 if, 8개의 elif, 1개의 else를 이용해서 표현할 수 있겠습니다.

참고로 if - else문 말고도 if - elif문이 있습니다. if - elif문은 else가 없는 대신 elif로 코드를 짜는 것입니다. 이때 else문이 없으니 모든 조건에 충족하지 못하는 경우가 있다면 해당 케이스는 제어문을 그냥 통과할 것 입니다. 아니면 elif문을 else처럼 사용할 수도 있습니다.

분리수거 예제를 수정하여 코드를 짜봅시다.

분리수거를 할 때, 페트병은 플라스틱에 버리고 과자봉지는 비닐에 버려야해
그리고 맥주병은 유리병에 버려야하고 나머지 쓰레기는 가만히 내비두자

이걸 코드로 짠다면

item = 분리수거하는 물건
if item == 페트병:
    플라스틱에 버림
elif item == 과자봉지:
    비닐에 버림
elif item == 맥주병:
    유리병에 버림

item이 페트병, 과자 봉지, 맥주병이 아닌 경우엔 그대로 코드를 통과하게 됩니다.

이제 문제를 풀어봅시다.

문제가 간단합니다. N의 값이 주어지는데 N = 0일 때 연세대학교의 영문명을 출력하고, N = 1일 때 연세대학교의 슬로건을 출력하면 되는 문제입니다.

이 문제는 N이 0일 때와 0이 아닐 때로 나누어질 수 있으므로 if - else문으로 표현할 수 있습니다.

n = int(input())
if n == 0:
    print('YONSEI')
else:
    print('Leading the Way to the Future')

if - elif 문으로 표현하면 다음과 같습니다.

n = int(input())
if n == 0:
    print('YONSEI')
elif n == 1:
    print('Leading the Way to the Future')

또 다른 문제를 풀어봅시다.

A가 B보다 크면 >를 출력하고, A가 B보다 작으면 <를 출력하고, A와 B가 같으면 ==를 출력하라고 합니다.

총 3가지 상황이 나오기 때문에 1개의 if, 1개의 elif, 1개의 else를 이용하여 코드를 짤 수 있습니다.

A, B = map(int, input().split())
if A > B:
    print('>')
elif A < B:
    print('<')
else:
    print('==')

혹은 elif 없이 if - else문으로만 만들고 싶으면 아래와 같이 코드를 짤 수도 있습니다.

A, B = map(int, input().split())
if A > B:
    print('>')
else:
    if A < B:
        print('<')
    else:
        print('==')

풀어볼 문제

비교 연산자

비교 연산자는 2개 이상의 피연산자를 비교하여 불리언 값을 반하게 만드는 연산자 입니다.

정의만 보면 무슨 소리인지 모르겠지만, 우리는 이미 수학 문제를 풀 때 사용하고 있는 방법이라 거의 다 알고 있는 내용입니다.

비교 연산자는 총 6개가 있습니다.

비교 연산자

의미

x == y

x와 y의 값이 같다.

x != y

x와 y의 값이 다르다.

x > y

x의 값이 y의 값보다 크다.

x >= y

x의 값이 y의 값보다 크거나 같다.

x < y

x의 값이 y의 값보다 작다.

x <= y

x의 값이 y의 값보다 작거나 같다.

위의 표에서 ==, !=, >, >=, <, <=이 비교 연산자이고 x와 y를 피연산자라고 합니다.

불리언 값은 True, False로 2가지가 있습니다. 해당 식이 참이면 True, 거짓이면 False를 반환하는 것입니다. 이 식들은 불리언 값을 도출해내므로 불리언 식이라고 부르고 있습니다.

print(1 > 2)
print(3 + 4 == 5 + 2)
print(1 % 2 < 1 // 2)

이렇게 피연산자 2개와 비교 연산자를 사용하여 출력을 하면 아래와 같이 출력되는 것을 확인할 수 있습니다.

False
True
False

피연산자를 3개 이상, 비교 연산자 2개 이상를 사용하여 만들 수도 있습니다.

print(1000 > 100 > 10) # True
print(1000 > 100 < 10) # False
print(10 >= 9 >= 8 >= 7 >= 6 >= 5 >= 4 >= 3 >= 2 >= 1) #True

그리고 당연하지만 if - else문에서 if문에 있는 불리언 식이 True일 때 if문 안의 코드가 돌아가고, False인 경우에는 else문의 코드가 들어갑니다. elif도 같습니다. elif에 있는 불리언 식이 True일 때만 elif 안에 있는 코드가 돌아갑니다. 이 부분은 지금 글에 나와있는 코드들을 보면 알 수 있습니다.

#x와 y가 1일 때 YES를 출력하고, 아니면 NO를 출력하기

x, y = map(int, input().split())

if x == y == 1: #만약 x = 1, y = 1이라면 x == y == 1은 True이기 때문에 YES를 출력함
    print('YES')
else:
    pirnt('NO')

참고로 False를 숫자로 표시하면 0이고, True는 0이 아닌 모든 숫자로 표현할 수 있습니다. 하지만 컴퓨터는 0과 1만 표현할 수 있기에 True를 int형으로 출력해보면 1을 출력하는 것을 알 수 있습니다.

print(int(True))
print(int(False))

이제 본격적으로 조건문과 비교 연산자를 사용하여 문제를 풀어봅시다.

정수 A, B, C를 입력 받고, 곱셈 기호와 나눗셈 기호를 각각 한 번씩 사용하여 가장 큰 값을 출력하라고 합니다. 이때 소수점은 버리라고 나와있으므로 출력할 때 int(변수)를 사용해서 출력해야 합니다.

A B C 숫자 사이에 곱셈 기호와 나눗셈 기호를 한 번만 사용하여 만들 수 있는 공식의 수는 2개 입니다.

A * B // C

A // B * C

이것은 elif 없이 if - else문으로 만들 수 있습니다.

A, B, C = map(int, input().split())

x = A * B / C
y = A / B * C

if x >= y:
    print(int(x))
else:
    print(int(y))

또 다른 문제를 풀어봅시다.

날짜를 뜻하는 두 개의 정수를 입력받는데 날짜가 2월 18일 전이면 Before를 출력하고, 2월 18일 이후면 After, 2월 18일이면 Special을 출력하는 문제입니다.

코드를 짜기 전에 일단 1월일 때, 2월 18일 이전일 때, 2월 18일인 경우, 2월 18일 이후일 때, 3월 이상일 때로 총 5가지로 나눌 수 있습니다.

코드를 짤 때는 1월일 때, 2월일 때, 3월 이상일 때로 if - elif - else문을 짤 수 있고, 2월일 때 18일 이전, 18일인 경우, 18일 이후로 elif문 안에 if - elif - else문을 작성해야 합니다.

x = int(input())
y = int(input())
if x == 1:
    print('Before')
elif x == 2:
    if y < 18:
        print('Before')
    elif y == 18:
        print('Special')
    else:
        print('After')
else:
    print('After')

풀어볼 문제

논리 연산자

논리 연산자는 비교 연산자와 비슷하게 2개 이상의 불리언 식을 비교하여 불리언 값을 계산하게 만드는 연산자 입니다.

논리 연산자

and

그리고

or

또는

not

부정

and는 '그리고'라는 의미를 지니고 있으므로 A and B가 있으면 A와 B가 둘 다 True여야 True가 나오게 됩니다. 둘 중 하나라도 False가 되면 False가 나옵니다. 둘 다 False여도 False가 나옵니다.

or는 '또는'이라는 의미를 지니고 있으므로 A or B가 있으면 A와 B 둘 중 하나라도 True라면 True가 나오게 됩니다. 둘 다 False이면 False가 나옵니다.

not은 부정이라는 의미를 지니고 있으므로 not A가 있으면 A가 True일 때 False를 반환하고, A가 False일 때 True를 반환합니다.

불리언 식

결과

True and True

True

True and False

False

False and True

False

False and False

False

불리언 식

결과

True or True

True

True or False

True

False or True

True

False or False

False

불리언 식

결과

not True

False

not False

True

이제 조건문, 비교 연산자, 논리 연산자를 모두 활용하는 문제들을 풀어봅시다.

세 줄에 걸쳐서 삼각형의 각의 크기가 주어지는데 조건에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력하라고 합니다.

먼저 세 각의 합이 180일 때와 180이 아닐 때로 나눌 수 있고, 세 각의 합이 180일 때는 세 각이 전부 60일 때와 두 각이 같은 경우와 하나도 같지 않은 경우로 나눠서 풀 수 있습니다. 이때 두 각이 같은 경우와 하나도 같지 않은 경우에는 논리 연산자를 이용할 수 있습니다.

먼저 세 각의 합이 180일 때와 180이 아닐 때만을 if - else문으로 짠다면 아래와 같습니다.

x = int(input())
y = int(input())
z = int(input())
if x + y + z == 180:
    blah blah
else:
    print("error")

그다음 blah blah 부분에 각이 전부 같은 경우, 각이 2개만 같은 경우, 각이 서로 다른 경우를 나눠서 풀면 됩니다.

z = int(input())
if x + y + z == 180:
    if x == 60 and y == 60 and z == 60: # x == y == z == 60
        print('Equilateral')
    elif x == y or y == z or z == x:
        print('Isosceles')
    else:
        print('Scalene')
else:
    print("error")

풀어볼 문제들

Last updated